top - sql get updated row count
TOP versus SET ROWCOUNT (2)
¿Hay alguna diferencia en el rendimiento entre TOP
y SET ROWCOUNT
o solo se ejecutan de la misma manera?
Sí, funcionalmente son lo mismo. Hasta donde yo sé, no hay diferencias de rendimiento significativas entre los dos.
Una cosa a tener en cuenta es que una vez que haya set rowcount
esto continuará durante la vida de la conexión, así que asegúrese de restablecerlo a 0
una vez que haya terminado con la conexión.
EDITAR (publicar el comentario de Martin)
El alcance de SET ROWCOUNT es solo para el procedimiento actual. Esto incluye procedimientos llamados por el procedimiento actual. También incluye SQL dinámico ejecutado a través de EXEC o SP_EXECUTESQL sicne que se consideran ámbitos "secundarios".
Tenga en cuenta que SET ROWCOUNT está en un alcance BEGIN / END, pero se extiende más allá de eso.
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
Resultado = 100 filas, luego 102 filas
Una nota más sobre el rendimiento, de acuerdo con BOL:
Como parte de una instrucción SELECT, el optimizador de consultas puede considerar el valor de la expresión en las cláusulas TOP o FETCH durante la optimización de la consulta. Como SET ROWCOUNT se usa fuera de una instrucción que ejecuta una consulta, su valor no se puede considerar en un plan de consulta.
Lo que significa que podría haber una diferencia de rendimiento en estos.