Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como evito a codificação de caracteres ao usar FOR XML PATH?


Você só precisa usar as opções certas com FOR XML . Aqui está uma abordagem que evita a codificação:
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;

Se você estiver em uma versão mais recente do SQL Server (2017+), poderá usar STRING_AGG() e não se preocupe com XML:
SELECT STRING_AGG(y, N',') FROM dbo.x;

db<>fiddle demonstrando os três.