sql >> Database >  >> RDS >> Sqlserver

Hoe voorkom ik tekencodering bij het gebruik van FOR XML PATH?

U hoeft alleen de juiste opties te gebruiken met FOR XML . Hier is een benadering die codering vermijdt:

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;

Als u een nieuwere versie van SQL Server (2017+) gebruikt, kunt u STRING_AGG() en maak je helemaal geen zorgen over XML:

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

db<>fiddle alle drie demonstreren.



  1. Invoegen in meerdere tabellen op basis van de andere tabelgegevens

  2. Database heeft een ongeldige waarde geretourneerd in QuerySet.dates()

  3. Hoe maak ik een tijdelijke tabel om dezelfde kolom op twee criteria te sorteren met behulp van Django's ORM?

  4. pg gem installeren; FOUT:kan de native extensie van de edelsteen niet bouwen