我只是给出了使用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返回多个结果集。
答案 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