У меня есть хранимая процедура SQL, которую мне нужно выполнить несколько раз с разными параметрами. Можно ли выполнить какой-либо SQL-скрипт, который будет выполняться несколько раз с массивом или другой структурой данных с разными параметрами? Есть мысли по этому поводу?
Выполнение SQL-запроса несколько раз с разными параметрами
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
Рассмотрите возможность использования
FAST_FORWARD
для повышения производительности, если курсор доступен только для чтения, а вы только продвигаетесь вперед. то есть: DECLARE curs CURSOR LOCAL FAST_FORWARD FOR...
- person YS.; 06.03.2012
Я бы, вероятно, немного реструктурировал дизайн, чтобы он соответствовал потребностям (чтобы обойти курсор), то есть:
вставить значения, которые должны быть выполнены в сохраненной процедуре, во временную таблицу, затем вызвать сохраненную процедуру (сохраненная процедура затем прочитает временную таблицу)
вызвать хранимую процедуру с помощью возвращающего табличное значение параметра
person
YS.
schedule
05.03.2012