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

时间:2019-02-28 12:19:52

标签: tsql stored-procedures sybase resultset

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

查询1

agreementId

查询2

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

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

2 个答案:

答案 0 :(得分: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';

答案 1 :(得分:0)

由于某些调用者在传递第一个结果集时启动返回,因此在proc主体的开头设置nocount为on。我不知道让一个查询返回2套。

set nocount on;