इसका उत्तर देना आसान हो सकता है यदि हम आपका स्प्लिट स्ट्रिंग फ़ंक्शन देख सकें। मेरा उत्तर मेरे स्प्लिट फ़ंक्शन के एक संस्करण का उपयोग कर रहा है जो मेरे पास है।
मैं आपके स्प्लिट फ़ंक्शन में एक पंक्ति संख्या शामिल करूंगा जिसका उपयोग आप स्प्लिट स्ट्रिंग और स्प्लिट मानों में शामिल होने के लिए कर सकते हैं।
स्प्लिट फंक्शन:
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;
फिर यदि आपके पास विभाजित करने के लिए एक से अधिक स्तंभ हैं, तो आप निम्न के समान क्वेरी का उपयोग कर सकते हैं:
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;
देखें SQL Fiddle with Demo
यह दो उपश्रेणियों का उपयोग करता है जो विभाजित मूल्यों की सूची उत्पन्न करते हैं, फिर वे विभाजन फ़ंक्शन द्वारा बनाई गई पंक्ति संख्या का उपयोग करके जुड़ जाते हैं।