У вас есть две опции здесь
Вариант 1 Использование Функция Split
Pass запятой deliminated список идентификаторов и использовать Разделить функции внутри ваша Процедура, чтобы разделить эти значения и сделать все, что вы хотите с ней сделать.
Чтобы Сделать работу вам понадобятся две вещи
1) создать функцию, которая принимает строку Comma Deliminated и разделить их.
2) Изменение вам процедуры сохранения и добавить эту функцию там в пути, который прошел параметр передается в функцию внутри этой процедуры магазина и , которые функционируют расколоть значения перед передачей его на вашу процедуру магазина .
Создать эту функцию 1-й
Функция Определение
CREATE FUNCTION [dbo].[FnSplit]
(
@List nvarchar(2000),
@SplitOn nvarchar(5)
)
RETURNS @RtnValue table (Id int identity(1,1), Value nvarchar(100))
AS
BEGIN
WHILE(Charindex(@SplitOn,@List)>0)
BEGIN
INSERT INTO @RtnValue (value)
SELECT VALUE = ltrim(rtrim(Substring(@List,1,Charindex(@SplitOn,@List)-1)))
SET @List = SUBSTRING(@List,Charindex(@SplitOn,@List)+len(@SplitOn),len(@List))
END
INSERT INTO @RtnValue (Value)
SELECT VALUE = ltrim(rtrim(@List))
RETURN
END
Modify вас strored Процедура что-то вроде этого
хранимая процедура
ALTER Procedure [dbo].[spMYPROC] (@Param1 VARCHAR(1000)= NULL)
AS
BEGIN
SELECT * FROM TableName
where ColumnNAME IN (SELECT Value FROM dbo.FnSplit(@Param1,','))
END
GO
Вариант 2 Таблица Параметр Тип
Создать тип таблицы и изменить свой процедурный принять Таблица Тип параметра и делать все, что вы хотите сделать с ними значения внутри прок.
ТАБЛИЦА ТИПА
CREATE TYPE dbo.TYPENAME AS TABLE
(
Value int
)
GO
хранимых процедур, чтобы принимать этот тип Param
ALTER PROCEDURE [dbo].[spMYPROC]
@TableParam TYPENAME READONLY
AS
BEGIN
SET NOCOUNT ON;
--Temp table to store passed Id values
declare @tmp_values table (value INT);
--Insert passed values to a table variable inside the proc
INSERT INTO @tmp_values (value)
SELECT Value FROM @TableParam
/* Do your stuff here whatever you want to do with Ids */
END
EXECUTE PROC
Объявите переменную этого типа и заполнить его с вашим значения.
DECLARE @Table TYPENAME --<-- Variable of this TYPE
INSERT INTO @Table --<-- Populating the variable
SELECT ID FROM myTABLE WHERE myName='bob'
EXECUTE [dbo].[spMYPROC] @Table --<-- Stored Procedure Executed
Вместо того, чтобы пытаться делать какие-то зацикливание на столе, то почему бы не пройти в идентификаторах хранимой процедуры? – TTeeple
Согласовано с @TTeeple - измените хранимую процедуру для обработки всех строк в 'myTABLE' вместо одной процедуры, которую вы называете N раз. Налицо существенные накладные расходы, не говоря уже о вызове хранимой процедуры каждый раз. SQL Server оптимизирован для работы с наборами. Вы хотите что-то сделать в своей процедуре для каждой строки в наборе, но вы действительно должны изменить ее, чтобы делать все, что угодно, для всех строк сразу. Если вы покажете тело своей процедуры, мы можем помочь вам в этом. –
Отметьте это сообщение, он делает что-то очень похожее: [Выполняйте хранимую процедуру несколько раз динамически] (http://stackoverflow.com/questions/21333405/run-a-stored-procedure-multiple-times-dynamicly/21335138# 21335138) – agileMike