存储过程返回两个数据集

问题描述 投票:-1回答:1

我有以下现有的存储过程,希望它能返回两个数据集。详情如下。

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

它的ID列和上面的存储过程是一样的,所以当我运行存储过程时,它将返回两个数据集,一个是已经发生的数据集,另一个是车辆表的三行数据集(每个车辆固定的)。因此,当我运行存储过程时,它将返回两个数据集,一个是已经发生的数据集,另一个是从车辆表中返回三行(每辆车的固定行)。

sql sql-server
1个回答
2
投票

你可以使用临时表。

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
© www.soinside.com 2019 - 2024. All rights reserved.