如何使用cte从存储过程返回多个结果集?

时间:2014-05-22 10:16:39

标签: sql sql-server stored-procedures

我只是给出了使用CTE的存储过程的简单示例。

ALTER PROCEDURE abc(
@startDate date,
@endDate date
)
AS
BEGIN
WITH allOrders AS(  
    SELECT  * FROM Orders
)
SELECT  * FROM allOrders;
SELECT  * FROM allOrders;
SELECT  * FROM allOrders;

END

当我执行此存储过程时,它会抛出错误。 Invalid object name 'allOrders'.

我怎么能这样做?我需要使用该cte返回多个结果集。

2 个答案:

答案 0 :(得分:1)

CTE基本上只用于单个语句。

公共表表达式(CTE)可以被认为是在单个SELECT,INSERT,UPDATE,DELETE或CREATE VIEW语句的执行范围内定义的临时结果集

详细了解Using Common Table Expressions

请在此处使用Temporary Table,以便您可以多次使用它。

答案 1 :(得分:1)

由于其他两个操作已经解释了CTE如何工作,我不打算再重复一遍,你可以做的是将从cte返回的记录插入临时表并多次从中选择,

像......这样的事情。

ALTER PROCEDURE abc(
@startDate date,
@endDate date
)
AS
BEGIN
;WITH allOrders AS(  
    SELECT  * FROM Orders
)
SELECT  * INTO #temp FROM allOrders;

SELECT  * FROM #temp;
SELECT  * FROM #temp;

END