UNION - результаты нескольких хранимых процедур
У меня есть хранимая процедура, мне нужно вызывать несколько разных времен, проходящих в разных параметрах каждый раз. Я хотел бы получить результаты в виде единого набора данных. Возможно что-то подобное...
exec MyStoredProcedure 1
UNION
exec MyStoredProcedure 2
UNION
exec MyStoredProcedure 3
Я попытался использовать синтаксис выше, но получил ошибку...
Incorrect syntax near the keyword 'UNION'
Хранимые процедуры, с которыми я имею дело, довольно сложны и представляют собой "черный ящик", поэтому я не могу войти в определение хранимой процедуры и изменить что-либо. Любые предложения о том, как собрать результаты вместе?
Я использую SQL Server 2008 R2. Спасибо за любую помощь.
Ответы
Ответ 1
Вам придется использовать такую таблицу temp. UNION предназначен для SELECT, а не для хранения procs
CREATE TABLE #foo (bar int ...)
INSERT #foo
exec MyStoredProcedure 1
INSERT #foo
exec MyStoredProcedure 2
INSERT #foo
exec MyStoredProcedure 3
...
И надеюсь, что сохраненные procs уже не имеют INSERT..EXEC..
, которые не могут быть вложенными. Или несколько наборов результатов. Или несколько других ломаных конструкций
Ответ 2
Вы можете использовать INSERT EXEC
для этого.
declare @myRetTab table (somcolumn ...)
insert @myRetTab
exec StoredProcName @param1
Затем используйте объединение в переменной таблицы или переменных.
Ответ 3
Вы можете все это сделать, но подумайте о том, что вы просите......
Вы хотите передать несколько параметров в sp и создать для него одинаковый формат результата для разных параметров. Таким образом, вы фактически создаете цикл и многократно вызываете хранимый процесс со скалярными данными.
Что вы должны сделать, так это переписать sp, чтобы он мог принимать наборы параметров и предоставлять вам комбинированный результат. Затем вы выполняете только 1 операцию на основе набора.
Вы можете передавать переменные таблицы в sp в 2008 году, пока вы сначала делаете свой собственный тип.
Ответ 4
Вот общий запрос
DECLARE @sql nvarchar(MAX)
DECLARE @sql1 nvarchar(MAX)
set @sql = 'select name from abc'
set @sql1 = 'select name from xyz'
EXECUTE(@sql + ' union all ' + @sql1)