で適切なオプションを使用する必要があります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 '<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'./text()[1]', N'nvarchar(max)'), 1, 1, N'');
GO
DROP TABLE dbo.x;
新しいバージョンのSQLServer(2017以降)を使用している場合は、STRING_AGG()
XMLを使用でき、XMLについてまったく心配する必要はありません。
SELECT STRING_AGG(y, N',') FROM dbo.x;
3つすべてを示すdb<>fiddle 。