sql-server - trancount - update rowcount sql server
¿Alcance de @@ rowcount? (2)
¿Cuál es el alcance de @@rowcount
? MSDN no menciona su alcance.
Devuelve el número de filas afectadas por la última instrucción.
De acuerdo.
En mi SP: estoy insertando en una tabla, que tiene un insert trigger
que hace otra inserción cuando se inserta un nuevo valor en la tabla.
Pregunta:
¿A qué alcance se referirá el @@rowcount
? (disparador o SP)?
Cada instrucción Insert / update / select / set / delete restablece el @@rowcount
a las filas afectadas por la instrucción ejecutada
begin
declare @myrowcount int,
@myrowcount2 int
insert stmt
SET @myrowcount=@@rowcount
if @myrowcount>0
begin
insert stmt
SET @myrowcount2 =@@rowcount
if @myrowcount2 >0
do smthg
end
end
o prueba esto
SELECT * FROM master.sys.objects -- 50 rows
IF (1=1)
SELECT @@ROWCOUNT AS RowsAffected -- 0, because the IF did not affect any rows
incluso una declaración IF lo afecta ... por lo tanto, su alcance es la última declaración leída.
Por supuesto, el artículo es para SQL Server 2000, pero uno esperaría que el alcance no cambie entre las versiones. De acuerdo con el artículo Cómo los desencadenantes afectan a ROWCOUNT y la IDENTIDAD en SQL Server 2000 , @@ROWCOUNT
no se verá afectado por los desencadenantes.
Específicamente:
Es seguro usar @@ ROWCOUNT en SQL Server 2000 incluso cuando hay un disparador en la tabla base. El disparador no sesgará tus resultados; obtendrás lo que esperas @@ ROWCOUNT funciona correctamente incluso cuando NOCOUNT está configurado.
Entonces, si actualiza tres filas y el activador actualiza cinco filas en otra parte, obtendrá un @@ROWCOUNT
de 3.
Además, a partir de la respuesta de GBN en SQL Server, ¿es seguro usar @@ ROWCOUNT en aplicaciones de multiproceso? :
@@ ROWCOUNT es seguro tanto al alcance como a la conexión.
De hecho, lee solo el último recuento de filas de la declaración para esa conexión y alcance.