Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да избегна кодиране на знаци, когато използвам FOR XML PATH?

Просто трябва да използвате правилните опции с FOR XML . Ето един подход, който избягва кодирането:

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;

Ако използвате по-нова версия на SQL Server (2017+), можете да използвате STRING_AGG() и изобщо да не се притеснявате за XML:

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

db<>цигулка демонстрирайки и трите.



  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

  2. Съхранение на файлове в SQL Server

  3. Първичен ключ за преглед на SQL Server

  4. Как да използвам UTF-8 Collation в база данни на SQL Server?

  5. Вмъкнете няколко реда в една колона