補足として、@ stringに特別なXML文字が含まれていない場合、TheGameiswarが投稿した内容は非常にうまく機能します。もしそうなら、あなたは小さな調整をする必要があるでしょう。これ:
for xml path('')),1,1,'')
これになる必要があります:
for xml path(''),TYPE).value('.', 'varchar(1000)'),1,1,'');
私のコメントと一緒に次のクエリを検討してください:
declare @string varchar(max)
set @string='<tag3>,<tag1>,<tag2>';
-- Note the output here:
;with cte
as
(
select *
from dbo.delimitedSplit8K(@string,',')
)
select stuff( (select ',' +item
from cte
order by item
for xml path('')),1,1,'');
-- this will handle special XML characters:
WITH cte
as
(
select *
from dbo.delimitedSplit8K(@string,',')
)
select stuff( (select ',' +item
from cte
order by item
for xml path(''),TYPE).value('.', 'varchar(1000)'),1,1,'');
ここで示している変更により、パフォーマンスは少し低下しますが、特殊なXML文字は正しく処理されます。
編集:言及するのを忘れました-私が使用している「スプリッター」はこの記事からのものです: http://www.sqlservercentral.com/articles/Tally+Table/72993/