Как вернуть два набора результатов из хранимой процедуры? - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть два запроса на текущей странице.Они очень похожи, но все равно возвращают различное количество записей.Вот пример:

Запрос 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?Текущий код имеет два отдельных запроса и автоматически попадает в базу данных дважды.Моя идея состоит в том, что два имеют один вызов к базе данных и возвращают два набора данных.Если у кого-то есть пример, как этого можно достичь, пожалуйста, дайте мне знать.Спасибо.

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Поскольку некоторые вызывающие абоненты инициируют возврат при первом доставленном наборе результатов, включите nocount в начале тела вашего proc.Я не знаю способов, чтобы один запрос возвращал 2 набора.

set nocount on;
0 голосов
/ 28 февраля 2019

Почему бы просто не включить еще один столбец?Два запроса в хранимой процедуре все еще дважды попадают в базу данных.

И вы можете выразить это как:

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';
...