Хранимая процедура для возврата двух наборов данных - PullRequest
0 голосов
/ 01 мая 2020

У меня есть следующая хранимая процедура, и я хочу, чтобы она возвращала два набора данных. Подробности следующие:

ALTER PROCEDURE [dbo].[GET_OrderByPhone]
    @Phone varchar(15),
AS
BEGIN
    SET NOCOUNT ON;

    SELECT O.ID, O.Type, O.Business, O.TimeXStamp, O.RefNum
    FROM Order O
    INNER JOIN Customer C ON O.ID = C.ID
    WHERE C.SelPhone = @Phone
    ORDER BY O.TimeXStamp DESC      
END

Я могу запустить его как

exec GET_OrderByPhone '123-456-8888'

Возвращает этот результат

ID | Type | Business | Timestamp  | RefNum
---+------+----------+------------+---------
1  | xx   | yy       | 2020-01-01 | zz

Теперь я должен добавить еще один запрос в том же хранимая процедура, которая будет возвращать несколько строк в виде отдельной таблицы. Моя новая таблица выглядит так:

VehicleTable
------------

ID | Type | Text 
---+------+-------
1  |  8   | Honda
1  |  9   | Civic
1  | 10   | Black

В ней есть столбец идентификатора, аналогичный приведенному выше хранимой процедуре. Поэтому, когда я запускаю хранимую процедуру, она возвращает два набора данных, один, как это уже происходит, и второй с тремя рядами (которые фиксированы для каждого транспортного средства) из таблицы транспортных средств.

1 Ответ

2 голосов
/ 01 мая 2020

Вы можете использовать временную таблицу:

ALTER PROCEDURE [dbo].[GET_OrderByPhone]
    @Phone varchar(15),
AS
BEGIN
    SET NOCOUNT ON;

     IF Object_ID('tempdb_..#Orders') DROP TABLE #Orders

     SELECT O.ID, O.Type, O.Business, O.TimeXStamp, O.RefNum INTO #Orders
     FROM Order O INNER JOIN 
          Customer C 
          ON O.ID = C.ID
     WHERE C.SelPhone = @Phone
     ORDER BY O.TimeXStamp DESC 

     SELECT O.*
     FROM #Orders O

     SELECT v.*
     FROM #Vehicles v
     WHERE EXISTS (SELECT 1 FROM #orders o WHERE o.id = v.id);

DROP TABLE #Orders

END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...