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

Stuff và 'For Xml Path' hoạt động như thế nào trong SQL Server?

Đây là cách nó hoạt động:

1. Nhận chuỗi phần tử XML với FOR XML

Thêm FOR XML PATH vào cuối truy vấn cho phép bạn xuất kết quả của truy vấn dưới dạng phần tử XML, với tên phần tử có trong đối số PATH. Ví dụ:nếu chúng ta chạy câu lệnh sau:

SELECT ',' + name 
              FROM temp1
              FOR XML PATH ('')

Bằng cách chuyển vào một chuỗi trống (FOR XML PATH ('')), thay vào đó chúng tôi nhận được như sau:

,aaa,bbb,ccc,ddd,eee

2. Xóa dấu phẩy ở đầu bằng STUFF

Câu lệnh STUFF theo nghĩa đen là "nhồi" một chuỗi vào một chuỗi khác, thay thế các ký tự trong chuỗi đầu tiên. Tuy nhiên, chúng tôi sử dụng nó đơn giản để xóa ký tự đầu tiên của danh sách giá trị kết quả.

SELECT abc = STUFF((
            SELECT ',' + NAME
            FROM temp1
            FOR XML PATH('')
            ), 1, 1, '')
FROM temp1

Các tham số của STUFF là:

  • Chuỗi được "nhồi" (trong trường hợp của chúng tôi là danh sách tên đầy đủ với dấu phẩy xếp trước)
  • Vị trí để bắt đầu xóa và chèn ký tự (1, chúng tôi đang nhồi nhét vào một chuỗi trống)
  • Số ký tự cần xóa (1, là dấu phẩy đứng đầu)

Vì vậy, chúng tôi kết thúc với:

aaa,bbb,ccc,ddd,eee

3. Tham gia trên id để có danh sách đầy đủ

Tiếp theo, chúng ta chỉ cần nối nó vào danh sách id trong bảng tạm thời, để có được danh sách các ID với tên:

SELECT ID,  abc = STUFF(
             (SELECT ',' + name 
              FROM temp1 t1
              WHERE t1.id = t2.id
              FOR XML PATH (''))
             , 1, 1, '') from temp1 t2
group by id;

Và chúng tôi có kết quả:

Id Tên 1aaa, bbb, ccc, ddd, eee

Hy vọng điều này sẽ hữu ích!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách thêm Ràng buộc khóa ngoại vào bảng hiện có trong SQL Server - Hướng dẫn SQL Server / TSQL Phần 68

  2. Cách tạo câu lệnh bảng thả cho tất cả các bảng trong cơ sở dữ liệu - Hướng dẫn SQL Server / T-SQL Phần 48

  3. hành vi nối nvarchar / chỉ mục / nvarchar (tối đa) không thể giải thích được

  4. Cách thay đổi cột từ Null thành Không Null trong Bảng SQL Server - Hướng dẫn SQL Server / T-SQL Phần 52

  5. Nhận đặc quyền cột cho một bảng trong SQL Server bằng T-SQL:sp_column_privileges