Có thể dễ dàng trả lời điều này hơn nếu chúng tôi có thể thấy hàm chia chuỗi của bạn. Câu trả lời của tôi là sử dụng một phiên bản của hàm phân tách mà tôi có.
Tôi sẽ bao gồm trong hàm phân tách của bạn một số hàng mà bạn có thể sử dụng để THAM GIA chuỗi phân tách và các giá trị phân tách.
Chức năng phân chia:
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;
Sau đó, nếu bạn có nhiều cột để tách, bạn có thể sử dụng một truy vấn tương tự như sau:
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;
Điều này sử dụng hai truy vấn con tạo ra danh sách các giá trị tách, sau đó chúng được nối với nhau bằng cách sử dụng số hàng được tạo bởi hàm tách.