TOP与SET ROWCOUNT

Gar*_*ler 13 sql performance

是否有之间的性能差异TOPSET ROWCOUNT还是他们只是以同样的方式执行?

And*_*are 11

是的,功能上他们是一回事.据我所知,两者之间没有明显的性能差异.

需要注意的一件事是,一旦你有set rowcount这个将持续连续的生命,所以0一旦你完成它,请确保你重置它.


编辑(发表马丁的评论)

SET ROWCOUNT的范围仅适用于当前过程.这包括当前程序调用的过程.它还包括通过EXEC或SP_EXECUTESQL执行的动态SQL,它们被视为"子"范围.

请注意,SET ROWCOUNT位于BEGIN/END范围内,但它超出了范围.

create proc test1
as
begin
    begin
    set rowcount 100
    end
    exec ('select top 101 * from master..spt_values')
end
GO

exec test1
select top 102 * from master..spt_values
Run Code Online (Sandbox Code Playgroud)

结果= 100行,然后102行