Yes, functionally they are the same thing. As far as I know there are no significant performance differences between the two.
Just one thing to note is that once you have set rowcount
this will persist for the life of the connection so make sure you reset it to 0
once you are done with it.
EDIT (post Martin's comment)
The scope of SET ROWCOUNT
is for the current procedure only. This includes procedures called by the current procedure. It also includes dynamic SQL executed via EXEC
or SP_EXECUTESQL
since they are considered "child" scopes.
Notice that SET ROWCOUNT
is in a BEGIN/END
scope, but it extends beyond that.
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
Result = 100 rows, then 102 rows
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…