sql >> Databasteknik >  >> RDS >> Sqlserver

Hur undviker jag teckenkodning när jag använder FOR XML PATH?

Du behöver bara använda rätt alternativ med FOR XML . Här är ett tillvägagångssätt som undviker kodning:

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;

Om du använder en nyare version av SQL Server (2017+) kan du använda STRING_AGG() och oroa dig inte för XML alls:

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

db<>fiol demonstrerar alla tre.



  1. Hur kontrollerar man om insättningen misslyckas?

  2. Hur man kör flera transaktioner samtidigt i PostgreSQL

  3. InnoDB Tabellen är full fel

  4. DISTINCT med två array_agg (eller en array_agg med tupel inuti)?