web-dev-qa-db-fra.com

Comment éviter l'encodage de caractères lors de l'utilisation de "FOR XML PATH"?

Je cherche à créer une liste de valeurs séparées par des virgules à partir d'une table SQL Server 2005, tout comme dans question de JanetOhara . J'utilise une requête similaire à celle présentée dans réponse de techdo à la question.

Tout fonctionne, sauf que la liste des valeurs est encodée en XML. Quel devrait être:

Sports & Recreation,x >= y

Renvoie à la place:

Sports & Recreation,x <= y

Existe-t-il un moyen de désactiver le codage de caractères XML lors de l'utilisation de "FOR XML" dans SQL Server?

44
dangowans

Il vous suffit d'utiliser les bonnes options avec FOR XML. Voici une approche qui évite le codage:

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 '';

-- 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;
103
Aaron Bertrand