我有以下现有的存储过程,希望它能返回两个数据集。详情如下。
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列和上面的存储过程是一样的,所以当我运行存储过程时,它将返回两个数据集,一个是已经发生的数据集,另一个是车辆表的三行数据集(每个车辆固定的)。因此,当我运行存储过程时,它将返回两个数据集,一个是已经发生的数据集,另一个是从车辆表中返回三行(每辆车的固定行)。
你可以使用临时表。
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