我可以做到
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优先于临时表,反之亦然?
答案 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,你应该使用什么取决于你想做什么。在某些情况下,创建临时表非常有意义,并且在某些情况下完全没有必要。