Выполнение SQL-запроса несколько раз с разными параметрами

У меня есть хранимая процедура SQL, которую мне нужно выполнить несколько раз с разными параметрами. Можно ли выполнить какой-либо SQL-скрипт, который будет выполняться несколько раз с массивом или другой структурой данных с разными параметрами? Есть мысли по этому поводу?


person SoftwareSavant    schedule 05.03.2012    source источник
comment
Откуда параметры? Таблица БД?   -  person John Pick    schedule 06.03.2012
comment
Ага. Определенный столбец в таблице не меньше.   -  person SoftwareSavant    schedule 06.03.2012
comment
Можно перебирать значения столбца в таблице и использовать их в качестве параметров при вызове хранимой процедуры. Но это может быть медленным. Иногда лучше (если это вообще возможно) переписать хранимую процедуру как непроцедурный SQL. Конечно, вы не показали свой код, поэтому невозможно сказать, что лучше в вашем случае.   -  person John Pick    schedule 06.03.2012


Ответы (2)


вы можете использовать курсор (но если есть возможность реструктурировать код, попробуйте ответ YS):

РЕДАКТИРОВАТЬ: добавлен FAST_FORWARD в соответствии с предложением @YS

DECLARE @param INT

-- getting your parameter from the table
DECLARE curs CURSOR LOCAL FAST_FORWARD FOR
    SELECT afield FROM atable WHERE ...

OPEN curs

FETCH NEXT FROM curs INTO @param

-- executing your stored procedure once for every value of your parameter     
WHILE @@FETCH_STATUS = 0 BEGIN
    EXEC usp_stored_Procedure @param
    FETCH NEXT FROM curs INTO @param
END

CLOSE curs
DEALLOCATE curs
person Paolo Falabella    schedule 05.03.2012
comment
Рассмотрите возможность использования FAST_FORWARD для повышения производительности, если курсор доступен только для чтения, а вы только продвигаетесь вперед. то есть: DECLARE curs CURSOR LOCAL FAST_FORWARD FOR... - person YS.; 06.03.2012

Я бы, вероятно, немного реструктурировал дизайн, чтобы он соответствовал потребностям (чтобы обойти курсор), то есть:

  • вставить значения, которые должны быть выполнены в сохраненной процедуре, во временную таблицу, затем вызвать сохраненную процедуру (сохраненная процедура затем прочитает временную таблицу)

  • вызвать хранимую процедуру с помощью возвращающего табличное значение параметра

person YS.    schedule 05.03.2012