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)