Beispiel Code um die Werte aus einem einzelnem Feld als Tabelle bereitzustellen:
/*
Felder die Semikolon separierte Felder enthalten, sollen diese in Tabelle mit entsprechend vielen Zeilen sein
*/
Create Table #t (Id int unique, value varchar(254))
Insert into #t Values(1, 'a;bb;ccc;')
Insert into #t Values(2, 'x;yy')
Insert into #t Values(3, NULL)
/*Erst an das Ende Semikolons anhängen*/
Update #t set value=rtrim(value)+';' Where right(rtrim(value),1)<>';' and (value<>'')
--Select * from #t
;With ht(Id, v, Pos)
As (
/*Anker*/
Select id, Substring(value,1,CHARINDEX(';',value,1)-1), CHARINDEX(';',value,1)-1 as Pos
From #t
Where CHARINDEX(';',value,3)>0
union all
/*Recursion*/
Select #t.Id, Substring(#t.value,ht.Pos+2,CHARINDEX(';',value,ht.Pos+2)-1 - ht.pos - 1), CHARINDEX(';',value,ht.Pos+2)-1 as Pos
From #t
inner join ht on #t.Id = ht.Id
Where CHARINDEX(';',#t.value, (ht.Pos+2)) > 0
)
Select *
from ht
Drop Table #t
