UNION多个存储过程的结果

我有一个存储过程,我需要调用几次不同的时间传递不同的参数。 我想收集结果作为一个单一的数据集。 是这样的可能性…

exec MyStoredProcedure 1 UNION exec MyStoredProcedure 2 UNION exec MyStoredProcedure 3 

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

 Incorrect syntax near the keyword 'UNION' 

我正在处理的存储过程相当复杂,对我来说是一个“黑匣子”,所以我无法进入存储过程的定义并改变任何东西。 有关如何将结果汇总在一起的任何build议?

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

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

 CREATE TABLE #foo (bar int ...) INSERT #foo exec MyStoredProcedure 1 INSERT #foo exec MyStoredProcedure 2 INSERT #foo exec MyStoredProcedure 3 ... 

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

你可以使用INSERT EXEC

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

然后在表variables或variables上使用联合。

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

你想传递多个参数给sp,并让它产生不同的参数相同的格式结果集。 所以你实际上正在做一个循环,并用标量数据反复调用存储过程。

应该做的是重写sp,以便它可以使用多组参数并为您提供组合的结果。 那么你只能做一套基于操作。

只要您先创build自己的types,就可以在2008年将表variables传递给sp。

这里是一般查询

 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)