UNION多个存储过程的结果

时间:2011-03-13 20:16:17

标签: sql sql-server stored-procedures union

我有一个存储过程,我需要多次调用,每次传递不同的参数。我想将结果收集为单个数据集。这样的事情可能......

exec MyStoredProcedure 1
UNION
exec MyStoredProcedure 2
UNION
exec MyStoredProcedure 3

我尝试使用上面的语法但得到了错误......

Incorrect syntax near the keyword 'UNION'

我正在处理的存储过程非常复杂,对我来说是一个“黑盒子”,所以我无法进入存储过程的定义并改变任何东西。关于如何一起收集结果的任何建议?

我正在使用SQL Server 2008 R2。谢谢你的帮助。

4 个答案:

答案 0 :(得分:67)

你必须使用像这样的临时表。 UNION用于SELECT,而不是存储过程

CREATE TABLE #foo (bar int ...)

INSERT #foo
exec MyStoredProcedure 1

INSERT #foo
exec MyStoredProcedure 2

INSERT #foo
exec MyStoredProcedure 3

...

并希望存储过程没有INSERT..EXEC..已经无法嵌套。或多个结果集。或者其他一些破坏构造

答案 1 :(得分:11)

您可以使用INSERT EXEC

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

然后在表变量或变量上使用union。

答案 2 :(得分:4)

可以做所有这些,但想想你在问什么......

您希望将多个参数传递给sp并使其为不同的参数生成相同的格式结果集。因此,实际上,您正在进行循环并使用标量数据重复调用存储过程。

然后你只做一组基于操作。

只要您首先创建自己的类型,就可以将表变量传递到2008中的sp。

答案 3 :(得分:1)

这是一般查询

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)