web-dev-qa-db-ja.com

「FOR XML PATH」を使用するときに文字エンコードを回避するにはどうすればよいですか?

JanetOharaの質問 のように、SQL Server 2005テーブルからコンマ区切りの値のリストを作成しようとしています。私は techdo's answer で提示された質問と同様の質問を使用しています。

値のリストがXMLエンコードされていることを除いて、すべてが機能しています。あるべきこと:

Sports & Recreation,x >= y

代わりに次を返します:

Sports & Recreation,x <= y

SQL Serverで「FOR XML」を使用するときにXML文字エンコードを無効にする方法はありますか?

44
dangowans

FOR XMLで正しいオプションを使用するだけです。エンコードを回避する1つのアプローチを次に示します。

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;
103
Aaron Bertrand