СОЮЗ результаты нескольких хранимых процедур - PullRequest
43 голосов
/ 13 марта 2011

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

exec MyStoredProcedure 1
UNION
exec MyStoredProcedure 2
UNION
exec MyStoredProcedure 3

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

Incorrect syntax near the keyword 'UNION'

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

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

Ответы [ 4 ]

69 голосов
/ 13 марта 2011

Вы должны использовать временную таблицу, подобную этой.UNION предназначен для SELECT, а не для сохраненных процедур

CREATE TABLE #foo (bar int ...)

INSERT #foo
exec MyStoredProcedure 1

INSERT #foo
exec MyStoredProcedure 2

INSERT #foo
exec MyStoredProcedure 3

...

И надеюсь, что хранимые процедуры уже не имеют INSERT..EXEC.., которые не могут быть вложенными.Или несколько наборов результатов.Или несколько других разрушающих конструкций

11 голосов
/ 13 марта 2011

Для этого можно использовать INSERT EXEC.

declare @myRetTab table (somcolumn ...)
insert @myRetTab
exec StoredProcName @param1

Затем использовать объединение для табличной переменной или переменных.

4 голосов
/ 14 марта 2011

Вы можете делать все это, но подумайте о том, что вы спрашиваете ......

Вы хотите передать несколько параметров в sp, и он даст один и тот же результат форматирования для разных параметров. Таким образом, вы фактически делаете цикл и повторно вызываете хранимый процесс со скалярными данными.

Что вы должны сделать, это переписать sp, чтобы он мог принимать наборы параметров и предоставлять вам комбинированный результат. Затем вы выполняете только 1 операцию на основе набора.

Вы можете передавать переменные таблицы в sp в 2008 году, если сначала создадите свой собственный тип.

2 голосов
/ 03 октября 2014

Вот общий запрос

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)
...