Het is misschien gemakkelijker om dit te beantwoorden als we je gesplitste tekenreeksfunctie zouden kunnen zien. Mijn antwoord is het gebruik van een versie van mijn split-functie die ik heb.
Ik zou in je split-functie een rijnummer opnemen dat je kunt gebruiken om de split-string en de split-waarden samen te voegen.
Split-functie:
CREATE FUNCTION [dbo].[Split](@String varchar(MAX), @Delimiter char(1))
returns @temptable TABLE (items varchar(MAX), rn int)
as
begin
declare @idx int
declare @slice varchar(8000)
declare @rn int = 1 -- row number that increments with each value in the delimited string
select @idx = 1
if len(@String)<1 or @String is null return
while @idx!= 0
begin
set @idx = charindex(@Delimiter,@String)
if @idx!=0
set @slice = left(@String,@idx - 1)
else
set @slice = @String
if(len(@slice)>0)
insert into @temptable(Items, rn) values(@slice, @rn)
set @String = right(@String,len(@String) - @idx)
set @rn = @rn +1
if len(@String) = 0 break
end
return
end;
Als u vervolgens meerdere kolommen wilt splitsen, kunt u een zoekopdracht gebruiken die lijkt op de volgende:
INSERT INTO dbo.tblSplitData(SplitKey, SplitString, SplitValues)
select s.rawkey,
s.splitstring,
v.splitvalues
from
(
SELECT d.RawKey, d.delimitedstring, d.delimitedvalues,
c.items SplitString,
c.rn
FROM dbo.tblRawData d
CROSS APPLY dbo.Split(d.DelimitedString, ',') c
) s
inner join
(
SELECT d.RawKey, d.delimitedstring, d.delimitedvalues,
c.items SplitValues,
c.rn
FROM dbo.tblRawData d
CROSS APPLY dbo.Split(d.DelimitedValues, ',') c
) v
on s.rawkey = v.rawkey
and s.delimitedstring = v.delimitedstring
and s.rn = v.rn;
Dit maakt gebruik van twee subquery's die de lijst met gesplitste waarden genereren, waarna ze worden samengevoegd met behulp van het rijnummer dat door de splitsingsfunctie is gemaakt.