18

我可以做

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

select * from #randomTenUsers

或者

WITH randomTenUsers   as (select top 10 * from users)    

select * from randomTenUsers

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

有没有理由为什么应该优先使用 WITH 而不是临时表,反之亦然?

4

1 回答 1

23

据我了解, 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 在评论中所说,您应该使用什么取决于您想要做什么。在某些情况下,创建临时表非常有意义,而在某些情况下则完全没有必要。

于 2013-05-22T17:49:31.323 回答