我编写了两个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%
答案 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不复杂,我会考虑将它们变成视图或内联表值函数。这些可以通过其他例程(如视图,函数或过程)轻松组合,使事情更加模块化。