sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan undgår jeg tegnkodning, når jeg bruger FOR XML PATH?

Du skal bare bruge de rigtige muligheder med FOR XML . Her er en tilgang, der undgår 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;

Hvis du er på en nyere version af SQL Server (2017+), kan du bruge STRING_AGG() og slet ikke bekymre dig om XML:

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

db<>fiddle demonstrerer alle tre.



  1. Hvorfor bruge InnoDB over MySIAM

  2. SQL:Vælg dynamisk kolonnenavn baseret på variabel

  3. JOOQ Oracle Number præcision og java nummer mapping

  4. Oracle hvordan man indlæser et billede i en klatkolonne ved hjælp af sqlldr