verificar update trancount num sql-server rowcount

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.