आपको इसके समान एक स्प्लिट फ़ंक्शन बनाना होगा:
create FUNCTION [dbo].[Split](@String varchar(MAX), @Delimiter char(1))
returns @temptable TABLE (items varchar(MAX))
as
begin
declare @idx int
declare @slice varchar(8000)
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) values(@slice)
set @String = right(@String,len(@String) - @idx)
if len(@String) = 0 break
end
return
end;
फिर अपनी संग्रहीत कार्यविधि में, आप अपनी स्ट्रिंग को विभाजित करने के लिए फ़ंक्शन को कॉल करेंगे:
ALTER PROCEDURE [dbo].[spInsertDistributionRuleListType]
(
@Rule_ID int,
@ListType_ID int,
@Values VARCHAR(MAX)=NULL
)
AS
BEGIN
INSERT INTO DistributionRule_x_ListType (Rule_ID, ListType_ID, Value)
SELECT @Rule_ID, @ListType_ID, items
FROM [dbo].[Split] (@Values, ',') -- call the split function
END
जब आप संग्रहीत कार्यविधि को निष्पादित करते हैं, तो यह मानों को विभाजित कर देगा और आपकी तालिका में एकाधिक पंक्तियों को सम्मिलित करेगा:
exec spInsertDistributionRuleListType 1, 2, '319,400,521,8465,2013';
डेमो के साथ SQL Fiddle देखें। यह निम्नलिखित परिणाम सम्मिलित करेगा:
| RULE_ID | LISTTYPE_ID | VALUE |
---------------------------------
| 1 | 1 | 10 |
| 1 | 2 | 319 |
| 1 | 2 | 400 |
| 1 | 2 | 521 |
| 1 | 2 | 8465 |
| 1 | 2 | 2013 |