Само като странична бележка:публикуваното от TheGameiswar ще работи много добре, ако при условие, че @string не съдържа никакви специални XML знаци. Ако го направи, ще трябва да направите малка корекция. Това:
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/