Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak uniknąć kodowania znaków podczas używania FOR XML PATH?

Musisz tylko użyć odpowiednich opcji z FOR XML . Oto jedno podejście, które pozwala uniknąć kodowania:

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;

Jeśli korzystasz z nowszej wersji programu SQL Server (2017+), możesz użyć STRING_AGG() i nie martw się o XML:

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

db<>skrzypce demonstrując wszystkie trzy.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zaimplementować rejestrowanie i raportowanie błędów w procedurach składowanych SQL?

  2. jak stworzyć schemat XML z istniejącej bazy danych w SQL Server 2008

  3. Zmiana właściwości połączonego serwera w SQL Server

  4. Przykłady COS() w SQL Server

  5. Jak wybrać rekordy, które nie istnieją na serwerze SQL?