如何使用“FOR XML PATH”当我避免字符编码?(How do I avoid charact

2019-07-23 14:12发布

我期待从SQL Server 2005表中创建一个逗号分隔值列表,就像在JanetOhara的问题 。 我使用的是类似于中提出的一个查询techdo的回答这个问题。

一切正常,除了值的列表是越来越XML编码。 应该是什么:

Sports & Recreation,x >= y

是不是返回为:

Sports & Recreation,x <= y

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

Answer 1:

你只需要与使用正确的选项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 '<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;


Answer 2:

看到这个帖子创建级联分隔字符串从SQL结果集,并避免字符编码使用“FOR XML PATH”时

另一种方法是依靠字符连接(当然SQL不是伟大的字符串操作,因为它是开发与集理论工作)

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


文章来源: How do I avoid character encoding when using “FOR XML PATH”?