Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL存储过程合并结果_Sql_Sql Server - Fatal编程技术网

SQL存储过程合并结果

SQL存储过程合并结果,sql,sql-server,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 它给出的

我已经编写了两个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%

你不能用你描述的方式来称呼他们(例如exec query1 exec query2)。下面是一个备选方案,假设每个进程返回一个值:

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
你可以试试:

exec query1; exec query2

但请注意,结果不是组合的,您只需将两个SP的结果作为单独的结果集获取。

因为它们都返回相同的列标题/数据类型,我建议将两个单独的查询组合到一个查询中,并使用UNION ALL

例:


在没有看到实际存储过程的情况下,很难给出更具体的建议,但这肯定比使用两个单独的过程要清楚得多。希望这会有所帮助。

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


如果PROC不复杂,我会考虑将它们转换成视图或内联表值函数。这些可以很容易地与其他例程(如视图、函数或过程)结合起来,使事情变得更加模块化。

除了语法错误之外,还提供一些代码可能有助于人们阅读您的帖子。什么在使用这些数据?一个报告工具,比如Crystal Reports?你是100%正确的,我试过你的代码,它可以工作!!谢谢在您的语法中,它只给出第一个查询的单个结果。看起来它没有执行第二个查询。我需要单独的结果。我尝试了跟踪它不起作用的exec query1 UNION execquery2@Satish对,你不能用procs来做。这就是为什么我说必须将它们输出到表中,然后选择联合。还有为什么我建议在可能的情况下使用其他数据库结构-例如,使用表值函数可以:SELECT*FROM TVF1(params)UNION TVF2(params)我已尝试运行您的代码,其给出的错误语法为double。“我正在MS SQL 2008 server上运行此代码。@Satish更正了我的答案。我在语法上有个错误。对不起,谢谢!现在我得到错误“列名或提供的值的数量与表定义不匹配”。有什么想法吗?两个分别表示“研究名称”和“可用性”。你们可以在我的问题中看到这一点。@lcarus-若你们看我最初的问题,我已经提到我需要研究和可用性格式的结果。query1给我结果,query2给我结果,当我生成报告时,我希望它们在单个页面中,所以我将在单个页面中显示。第一栏“研究”和第二栏“可用性”,以该研究的百分比表示。你得到我想要达到的目标了吗?
SELECT 'ACR'      AS Study,
        SomeField AS Availability
FROM SomeTable1

UNION ALL 

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