Мне нужно создать хранимый процесс, который возвращает два набора результатов.Второй набор содержит записи, которые связаны с записями в первом наборе посредством отношения родитель / потомок.
Например, первый оператор возвращает заказы:
SELECT ID, col2, col3, ...
FROM dbo.Orders
WHERE x=y
второй оператор возвращаетотдельные предметы для этих заказов:
SELECT ID, OrderID, col3, col4, ...
FROM dbo.OrderItems
WHERE OrderID IN (<IDs from first statement>)
Я ищу наиболее эффективный способ добиться этого.В настоящее время мое решение выглядит следующим образом:
-- create a table variable to hold results from first statement
DECLARE @Result TABLE
(
ID int NOT NULL,
col2 nvarchar(50),
col3 nvarchar(50)
)
-- select orders
INSERT INTO @Result (ID, col2, col3)
SELECT ID, col2, col3, ...
FROM dbo.Orders
WHERE x=y
SELECT * FROM @Result
-- select order items corresponding to the orders in the @Result table
SELECT ID, OrderID, col3, col4
FROM dbo.OrderItems I
INNER JOIN @Result R ON R.ID = I.OrderID
Кажется, это работает довольно хорошо.Однако требования таковы, что предложение WHERE в первом операторе становится довольно сложным и пригодно для использования оператора CTE (WITH), но наличие как WITH, так и табличной переменной становится довольно запутанным.Как лучше решить эту проблему?