如何从存储过程返回两个结果集?

问题描述 投票:0回答:2

我在当前页面中有两个查询。它们非常相似,但仍然返回不同数量的记录。这是一个例子:

查询1

SELECT 
   recid,
   cost,
   cur_year
FROM Info i
   INNER JOIN Extension ex
       ON ex.recid = i.recid
       AND ex.categoryid = i.categoryid
WHERE cur_year = 2018
    AND info_id = 4531

查询2

SELECT SUM(cost) AS cost_total
FROM Info i
   INNER JOIN Extension ex
       ON ex.recid = i.recid
       AND ex.categoryid = i.categoryid
WHERE cur_year = 2018
    AND info_id = 4531
    AND cost > 0

在这种情况下,查询1返回2条记录。查询2返回1条记录。我想知道将这两个放在SP中是一个好主意吗?当前代码有两个单独的查询,并自动两次访问数据库。我的想法是两个人一次调用数据库并返回两个数据集。如果有人举例说明如何实现这一点请告诉我。谢谢。

tsql stored-procedures sybase resultset
2个回答
0
投票

为什么不包括另一列?存储过程中的两个查询仍在两次访问数据库。

并且,您可以将其表达为:

SELECT recid, cost, cur_date,
       SUM(CASE WHEN cost > 0 THEN cost ELSE 0 END) OVER () as total_cost
FROM Info i INNER JOIN
     Extension ex
     ON ex.recid = i.recid AND
        ex.categoryid = i.categoryid
WHERE cur_date = '2018' AND  -- this is suspicious.  Dates are not years
      info_id = '4531';

0
投票

由于一些呼叫者在第一次交付结果集时启动返回,因此在您的proc主体的开头设置nocount。我知道没有办法让一个查询返回2套。

set nocount on;
© www.soinside.com 2019 - 2024. All rights reserved.