Подтвердить что ты не робот

UNION - результаты нескольких хранимых процедур

У меня есть хранимая процедура, мне нужно вызывать несколько разных времен, проходящих в разных параметрах каждый раз. Я хотел бы получить результаты в виде единого набора данных. Возможно что-то подобное...

exec MyStoredProcedure 1
UNION
exec MyStoredProcedure 2
UNION
exec MyStoredProcedure 3

Я попытался использовать синтаксис выше, но получил ошибку...

Incorrect syntax near the keyword 'UNION'

Хранимые процедуры, с которыми я имею дело, довольно сложны и представляют собой "черный ящик", поэтому я не могу войти в определение хранимой процедуры и изменить что-либо. Любые предложения о том, как собрать результаты вместе?

Я использую SQL Server 2008 R2. Спасибо за любую помощь.

4b9b3361

Ответ 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)