Sql server CTE在内存中的存在

Sql server CTE在内存中的存在,sql-server,common-table-expression,Sql Server,Common Table Expression,我使用CTE创建了3个表,如下所示: ;WITH Temp1(...) AS (...), Temp2 AS (...), Temp3 AS (...) select * from Temp3; 我很好奇它们是否存在于记忆中(或某处?),Temp1和Temp2在Temp3创建后是否还在记忆中 它们都存在于with语句的范围内。 您可以通过从中选择来轻松证明这一点 ;with temp1 as (...), temp2 as (select * from temp1),

我使用CTE创建了3个表,如下所示:

;WITH Temp1(...)
AS
(...), Temp2
AS
(...), Temp3
AS
(...)
select * from Temp3;

我很好奇它们是否存在于记忆中(或某处?),Temp1和Temp2在Temp3创建后是否还在记忆中

它们都存在于
with
语句的范围内。 您可以通过从中选择来轻松证明这一点

;with 
    temp1 as (...),
    temp2 as (select * from temp1),
    temp3 as (...)
select * from temp1 
union 
select * from temp2
union 
select * from temp3

CTE类似于子查询。因此,在选择之后,它们不再被引用。但是,SQL Server旨在请求尽可能多的RAM,除非操作系统明确需要此内存,否则不会释放内存。如果您的问题是在此之后是否可以访问CTE,请选择“否”,否则您将无法访问。不要求
Temp2
必须基于
Temp1
,和
Temp3
on
Temp2
上的
Temp3
-任何CTE都可以在最后的
SELECT
语句中引用,它们可能是完全独立的。谢谢,因此1个CTE在内存性能方面与10个CTE完全相同?性能方面,堆叠CTE就像从视图中选择,从视图中选择,从视图中选择。。。是的,我试过你的建议,它们都存在。非常感谢。