sql >> Databáze >  >> RDS >> Sqlserver

SQL Server seřadí řetězec oddělený čárkami v jednom sloupci

Jen jako okrajovou poznámku:to, co TheGameiswar zveřejnil, bude fungovat velmi dobře, pokud @string nebude obsahovat žádné speciální znaky XML. Pokud ano, budete muset provést malou úpravu. Toto:

for xml path('')),1,1,'')

Musí se stát tímto:

for xml path(''),TYPE).value('.', 'varchar(1000)'),1,1,'');

Zvažte následující dotaz spolu s mými komentáři:

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,'');

Změna, kterou ukazuji, trochu sníží výkon, ale správně zpracovává speciální znaky XML.

Edit:Zapomněl jsem zmínit - "rozdělovač", který používám, pochází z tohoto článku:http://www.sqlservercentral.com/articles/Tally+Table/72993/



  1. Jak mohu zkontrolovat, zda běží MySQL a Tomcat?

  2. Spring's Stored Procedure - výsledky vracející se z procedury vždy prázdné

  3. Smyčka přes vkládací dotaz v PHP

  4. SQL Server vrací chybu Přihlášení uživatele 'NT AUTHORITY\ANONYMOUS LOGON' se nezdařilo. v aplikaci Windows