Foo*_*Foo 12 sql-server sql-server-2008-r2
我也可以
select * into #randomTenUsers from
(select top 10 * from users)x
select * from #randomTenUsers
Run Code Online (Sandbox Code Playgroud)
要么
WITH randomTenUsers as (select top 10 * from users)
select * from randomTenUsers
Run Code Online (Sandbox Code Playgroud)
根据我的理解,WITH语句还会创建一个临时结果集.
有没有理由认为WITH应优先于临时表,反之亦然?
Mik*_*son 19
根据我的理解,WITH语句还会创建一个临时结果集.
不,不是的.使用CTE不会创建"临时结果集".查询可能有理由创建工作表,但仅仅因为您使用CTE不是其中之一.
这两个查询具有相同的查询计划,并且它们都不会像tempdb中的临时表那样创建临时结果.
with randomTenUsers as
(
select top 10 *
from users
)
select *
from randomTenUsers;
Run Code Online (Sandbox Code Playgroud)
select *
from (
select top 10 *
from users
) x;
Run Code Online (Sandbox Code Playgroud)
正如marc_s在评论中所说,你应该使用什么取决于你想做什么.在某些情况下,创建临时表非常有意义,有些情况下完全没有必要.