Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

SQL Server FOR XML Path tạo các nút lặp lại

Thêm một cột có NULL làm giá trị để tạo một nút mục riêng cho mỗi cột.

SELECT 
  t.col1 as 'item'
 ,NULL
 ,t.col2 as 'item'
 ,NULL
 ,t.col3 as 'item' 
FROM dbo.tbl as t 
FOR XML PATH('parent'), TYPE;

Kết quả:

<parent>
  <item>1</item>
  <item>2</item>
  <item>3</item>
</parent>

SQL Fiddle

Tại sao điều này hoạt động?

Các cột không có tên được chèn dưới dạng các nút văn bản. Trong trường hợp này, giá trị NULL được chèn dưới dạng nút văn bản giữa item các nút.

Nếu bạn thêm các giá trị thực thay vì NULL, bạn sẽ thấy điều gì đang xảy ra.

SELECT 
  t.col1 as 'item'
 ,'1'
 ,t.col2 as 'item'
 ,'2'
 ,t.col3 as 'item' 
FROM dbo.tbl as t 
FOR XML PATH('parent'), TYPE;

Kết quả:

<parent>
  <item>1</item>1<item>2</item>2<item>3</item></parent>

Một cách khác để chỉ định một cột không có tên là sử dụng ký tự đại diện * dưới dạng bí danh cột.

Các cột có tên được chỉ định làm ký tự đại diện

Không cần thiết phải sử dụng ký tự đại diện trong trường hợp này vì các cột có giá trị NULL không có tên cột nhưng nó rất hữu ích khi bạn muốn các giá trị từ các cột thực nhưng bạn không muốn tên cột là tên nút.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tương đương tốt nhất cho IsInteger trong SQL Server

  2. Làm thế nào để lấy ngày đầu tiên và ngày cuối cùng của năm hiện tại?

  3. SQL JOIN so với IN hiệu suất?

  4. Đổi tên cột SQL Server 2008

  5. Giá trị rõ ràng cho cột nhận dạng trong bảng chỉ có thể được chỉ định khi danh sách cột được sử dụng và IDENTITY_INSERT BẬT SQL Server