使用"FOR XML PATH"时如何避免字符编码?

dan*_*ans 45 xml encoding sql-server-2005 for-xml-path

我正在寻找从SQL Server 2005表创建一个以逗号分隔的值列表,就像在JanetOhara的问题中一样.我正在使用类似于techdo对问题的回答中提出的查询.

一切正常,除了值列表正在进行XML编码.应该是什么:

Sports & Recreation,x >= y
Run Code Online (Sandbox Code Playgroud)

而是返回为:

Sports & Recreation,x <= y
Run Code Online (Sandbox Code Playgroud)

有没有办法在SQL Server中使用"FOR XML"时禁用XML字符编码?

Aar*_*and 106

你只需要使用正确的选项FOR XML.这是避免编码的一种方法:

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;
Run Code Online (Sandbox Code Playgroud)

  • 添加`type`和`.value('.[1]',nvarchar(max)')`工作得很好.谢谢您的帮助. (8认同)
  • TYPE告诉SQL返回实际的XML,然后你必须"查询"这个XML你想要的值这是".value('.[1]',nvarchar(max)').更多信息在这里:http:/ /technet.microsoft.com/en-us/library/ms190025.aspx (8认同)
  • 值得注意的是我发现`value`是区分大小写的,它不会识别`VALUE`. (3认同)