Есть ли разница в производительности между TOP и SET ROWCOUNT или они просто выполняются одинаково?


Да, функционально они одно и то же. Насколько мне известно, между ними нет существенной разницы в производительности.
Следует отметить, что после того, как у вас будет set rowcount, он будет сохраняться в течение всего срока подключения, поэтому не забудьте сбросить его на 0, как только вы закончите с ним.
SET ROWCOUNT предназначен только для текущей процедуры. Сюда входят процедуры, вызываемые текущей процедурой. Он также включает динамический SQL, выполняемый через EXEC или SP_EXECUTESQL, поскольку они считаются «дочерними» областями.
Обратите внимание, что 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
Результат = 100 строк, затем 102 строки
Не думаю, что последняя строчка верна. Смотрите мой ответ здесь stackoverflow.com/questions/5383761/…
@ Ричард: Я всегда думал, что BEGIN...END - это просто составное утверждение. Никогда не считал, что это тоже определение объема. Возможно, «глобальный» BEGIN...END - это особый случай, когда он используется для явного указания начала и конца тела программного объекта. Но даже тогда, я бы сказал, он просто визуализирует область действия объекта программирования, а не определяет ее собственную.
Каждый раз, когда вы выполняете динамический SQL, вы создаете новый пакет, работающий на собственном соединении. Это не очень хороший пример, и Set RowCount будет работать, даже если заключен в Begin и End.
Еще одно замечание о производительности, согласно BOL:
As a part of a SELECT statement, the query optimizer can consider the value of expression in the TOP or FETCH clauses during query optimization. Because SET ROWCOUNT is used outside a statement that executes a query, its value cannot be considered in a query plan.
Это означает, что на самом деле в них может быть разница в производительности.