leer convertir convert cast xml sql-server-2005 encoding for-xml-path

convertir - ¿Cómo evito la codificación de caracteres cuando uso "FOR XML PATH"?



sql server datetime format (2)

Estoy buscando crear una lista de valores separados por comas de una tabla de SQL Server 2005, al igual que en la pregunta de JanetOhara . Estoy usando una consulta similar a la presentada en la respuesta de techdo a la pregunta.

Todo funciona, excepto que la lista de valores está codificada en XML. Que deberia ser:

Sports & Recreation,x >= y

En cambio está regresando como:

Sports & Recreation,x <= y

¿Hay alguna manera de desactivar la codificación de caracteres XML cuando se usa "FOR XML" en SQL Server?


Consulte esta publicación sobre Creación de cadenas delimitadas concatenadas desde un conjunto de resultados de SQL y evite la codificación de caracteres al usar "FOR XML PATH"

Un enfoque alternativo sería confiar en la concatenación de caracteres (por supuesto, sql no es genial con operaciones de cadenas ya que está desarrollado para trabajar con la teoría de conjuntos)

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>''; DECLARE @delimitedText varchar(max) SET @delimitedText='''' SELECT @delimitedText += CASE WHEN LEN(@delimitedText) > 0 THEN +'',''+ y ELSE y END FROM dbo.x SELECT @delimitedText GO DROP TABLE dbo.x; GO


Solo necesita usar las opciones correctas con FOR XML . Aquí hay un enfoque que evita la codificació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;