我期待从SQL Server 2005表中创建一个逗号分隔值列表,就像在JanetOhara的问题 。 我使用的是类似于中提出的一个查询techdo的回答这个问题。
一切正常,除了值的列表是越来越XML编码。 应该是什么:
Sports & Recreation,x >= y
是不是返回为:
Sports & Recreation,x <= y
有没有办法在SQL Server中使用时,“FOR XML”禁用XML字符编码?
我期待从SQL Server 2005表中创建一个逗号分隔值列表,就像在JanetOhara的问题 。 我使用的是类似于中提出的一个查询techdo的回答这个问题。
一切正常,除了值的列表是越来越XML编码。 应该是什么:
Sports & Recreation,x >= y
是不是返回为:
Sports & Recreation,x <= y
有没有办法在SQL Server中使用时,“FOR XML”禁用XML字符编码?
你只需要与使用正确的选项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;
看到这个帖子创建级联分隔字符串从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