SQL存储过程组合结果

时间:2012-01-19 21:49:25

标签: sql sql-server

我编写了两个SQL Server存储过程

例如:

create PROCEDURE query1
AS
SQL code here...

create PROCEDURE query2
AS
SQL code here...

现在我可以使用以下命令单独调用它们,返回值如下。

exec query1

Study   availability
ACR        99.97%

现在我想结合这些存储过程并一次性获取结果,如:

exec query1
exec query2 

并且它给出了类似下面的结果,但不知怎的,它现​​在正在处理它给我语法错误。如何组合两个存储过程并在一个报告中获得结果?

这是T-SQL查询

Study   availability
ACR       99.97%
FOS       87.88%

4 个答案:

答案 0 :(得分:6)

你不能按照你描述的方式调用它们(即exec query1 exec query2)。假设每个proc返回一个值,这里有一个替代方法:

declare @result as table (
ACR float,
FOS float
)

INSERT INTO @result(ACR)
exec query1

INSERT INTO @result(FOS)
exec query2

SELECT ACR,FOS from @result

答案 1 :(得分:1)

您可以尝试:

exec query1; exec query2

但请注意,结果未合并,您只需将两个SP的结果作为单独的结果集。

答案 2 :(得分:1)

由于它们都返回相同的列标题/数据类型,我建议将2个单独的查询合并为一个查询并使用UNION ALL。

EX:

SELECT 'ACR'      AS Study,
        SomeField AS Availability
FROM SomeTable1

UNION ALL 

SELECT 'FOS'      AS Study,
        SomeField AS Availability
FROM SomeTable2;

如果没有看到您的实际存储过程,很难提供更具体的建议,但这肯定比有两个单独的程序更清晰。希望这会有所帮助。

答案 3 :(得分:0)

这取决于你的代码,你可以将每个SP的结果插入到一个表中,然后将它们组合在一起以获得你正在寻找的单个结果集 - 但是如果它是很多行,这通常会更慢您正在复制结果而不是将它们流式传输到客户端。并且它打破了优化器跨边界组合事物的能力,因为它必须将它们写入临时表。

如果procs不复杂,我会考虑将它们变成视图或内联表值函数。这些可以通过其他例程(如视图,函数或过程)轻松组合,使事情更加模块化。