Ще трябва да създадете функция за разделяне, подобна на тази:
create FUNCTION [dbo].[Split](@String varchar(MAX), @Delimiter char(1)) връща @temptable TABLE (items varchar(MAX)) като начало декларира @idx int declare @slice. varchar(8000) изберете @idx =1, ако len(@String)<1 или @String е нула, връщане, докато @idx!=0 начало set @idx =charindex(@Delimiter,@String) ако @idx!=0 set @ slice =left(@String,@idx - 1) else set @slice =@String if(len(@slice)>0) вмъкнете в @temptable(Items) стойности(@slice) set @String =right(@String, len(@String) - @idx) ако len(@String) =0 прекъсване край връщане край;
След това във вашата съхранена процедура ще извикате функцията за разделяне на низа ви:
ПРОЦЕДУРА ЗА ПРОМЕНИ [dbo].[spInsertDistributionRuleListType]( @Rule_ID int, @ListType_ID int, @Values VARCHAR(MAX)=NULL)ASBEGIN INSERT INTO DistributionRule_x_ListType (Rule_ID, ValidType_SELECT @Rupe_SELECT @Rupe_ID @Rupe_Type) , елементи FROM [dbo].[Split] (@Values, ',') -- извикайте функцията split END
Когато изпълните съхранената процедура, тя ще раздели стойностите и ще вмъкне множеството редове във вашата таблица:
exec spInsertDistributionRuleListType 1, 2, '319,400,521,8465,2013';
Вижте SQL Fiddle с демонстрация. Това ще вмъкне следния резултат:
<предварителен код>| RULE_ID | LISTTYPE_ID | СТОЙНОСТ |--------------------------------| 1 | 1 | 10 || 1 | 2 | 319 || 1 | 2 | 400 || 1 | 2 | 521 || 1 | 2 | 8465 || 1 | 2 | 2013 г. |