带有子句与临时表的SQL Server

时间:2013-05-22 16:01:14

标签: sql-server sql-server-2008-r2

我可以做到

select * into #randomTenUsers from
(select top 10 * from users)x    

select * from #randomTenUsers

OR

WITH randomTenUsers   as (select top 10 * from users)    

select * from randomTenUsers

据我所知,WITH语句还会创建一个临时结果集。

是否有理由认为WITH优先于临时表,反之亦然?

1 个答案:

答案 0 :(得分:18)

  

据我所知,WITH语句也会创建一个临时结果   集。

不,不。使用CTE不会创建“临时结果集”。查询可能有理由创建工作表,但仅仅因为您使用CTE不是其中之一。

这两个查询具有相同的查询计划,并且它们都不会像tempdb中的临时表那样创建临时结果。


with randomTenUsers as
(
  select top 10 *
  from users
)    
select * 
from randomTenUsers;

select * 
from (
     select top 10 * 
     from users
     ) x;

作为marc_s said in the comment,你应该使用什么取决于你想做什么。在某些情况下,创建临时表非常有意义,并且在某些情况下完全没有必要。