sql >> Databáze >  >> RDS >> Sqlserver

Jak se vyhnu kódování znaků při použití FOR XML PATH?

Stačí použít správné možnosti s FOR XML . Zde je jeden přístup, který se vyhýbá kódování:

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;

Pokud používáte novější verzi SQL Server (2017+), můžete použít STRING_AGG() a vůbec se nestarejte o XML:

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

db<>fiddle předvedení všech tří.



  1. MySQL LEFT JOIN duplikuje výsledky

  2. otázka levého vnějšího spojení

  3. Použití výsledků z dotazu v rámci stejného dotazu

  4. Vytvoření prostorového indexu na oracle