使用" FOR XML PATH&#34 ;?时,如何避免字符编码?

时间:2013-03-26 17:30:31

标签: xml sql-server-2005 encoding for-xml-path

我正在寻找从SQL Server 2005表创建一个以逗号分隔的值列表,就像在JanetOhara's question中一样。我正在使用类似于问题techdo's answer中提供的查询。

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

Sports & Recreation,x >= y

而是返回:

Sports & Recreation,x <= y

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

3 个答案:

答案 0 :(得分:100)

您只需要使用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;

答案 1 :(得分:0)

Creating concatenated delimited string from a SQL result set and avoid character encoding when using “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

答案 2 :(得分:0)

您也可以这样做:

<link href="https://fonts.googleapis.com/css?family=Arvo" rel="stylesheet">

<h1 id="title">Drum ? Kit</h1>
<div class="set">
  <button class="w drum">w</button>
  <button class="a drum">a</button>
  <button class="s drum">s</button>
  <button class="d drum">d</button>
  <button class="j drum">j</button>
  <button class="k drum">k</button>
  <button class="l drum">l</button>
</div>