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

Làm cách nào để tránh mã hóa ký tự khi sử dụng FOR XML PATH?

Bạn chỉ cần sử dụng các tùy chọn phù hợp với FOR XML . Đây là một cách tiếp cận tránh mã hóa:

USE tempdb;
GO

CREATE TABLE dbo.x(y nvarchar(255));

INSERT dbo.x SELECT 'Sports & Recreation'
   UNION ALL SELECT 'x >= y'
   UNION ALL SELECT 'blat'
   UNION ALL SELECT '<hooah>';

-- BAD:
SELECT STUFF((SELECT N',' + y
  FROM dbo.x 
  FOR XML PATH(N'')),1, 1, N'');

-- GOOD:
SELECT STUFF((SELECT N',' + y
  FROM dbo.x 
  FOR XML PATH, TYPE).value(N'.[1]', N'nvarchar(max)'),1, 1, N'');

GO
DROP TABLE dbo.x;

Nếu bạn đang sử dụng phiên bản SQL Server mới hơn (2017+), bạn có thể sử dụng STRING_AGG() và hoàn toàn không phải lo lắng về XML:

SELECT STRING_AGG(y, N',') FROM dbo.x;

db <> fiddle thể hiện cả ba.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server:nhóm theo liên tiếp

  2. Cách kết nối với SQL Server bằng Kết nối Internet

  3. id nhân viên tự động tạo với tiền tố

  4. Cách khôi phục bản sao lưu SQL Server 2014 trong SQL Server 2008

  5. Tôi có cần một đối tượng Dịch vụ không?