У меня есть хранимая процедура SQL, которую мне нужно выполнить несколько раз с разными параметрами. Возможно ли выполнить какой-либо SQL-скрипт, который будет выполняться несколько раз с таким же массивом или другой структурой данных разных параметров? Любые мысли по этому поводу?Выполнение SQL-запроса несколько раз с разными параметрами
ответ
вы можете использовать курсор (но если это возможно, чтобы перестроить свой код, попробуйте YS's answer):
EDIT: добавлены 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
Рассмотрите возможность использования 'FAST_FORWARD' для дополнительной производительности, если курсор только для чтения, и вы только продвигаетесь вперед. т.е.: 'DECLARE curs CURSOR LOCAL FAST_FORWARD FOR ...' –
@YS: вы правы. Спасибо за предложение! –
Это действительно работает очень хорошо. Мне нужно работать на моем T-SQL – SoftwareSavant
я, наверное, реструктурировать дизайн немного подойдет (для обхода курсора) - то есть:
Вставить значения, которые должны быть выполнены в s tored прок в временной таблицу, а затем вызвать хранимую процедуру (хранимая процедура будет читать временную таблицу)
вызова ХП с помощью таблицы-значного параметр
Где параметры берутся? Таблица БД? –
yep. Отдельный столбец в таблице не меньше. – SoftwareSavant
Можно пропустить значения столбца в таблице и использовать их в качестве параметров в вызове хранимой процедуры. Но это может быть медленным. Иногда лучше (если вообще возможно) переписать хранимая процедуру как непроцедурный SQL. Конечно, вы не указали свой код, поэтому невозможно сказать, что лучше в вашем случае. –