numero - sql server cantidad registros por tabla
¿Cómo puedo obtener la cantidad de registros afectados por un procedimiento almacenado? (6)
Para las INSERT
, UPDATE
y DELETE
SQL ejecutadas directamente en la base de datos, la mayoría de los proveedores de bases de datos devuelven el recuento de filas afectadas. Para los procedimientos almacenados, la cantidad de registros afectados siempre es -1
.
¿Cómo obtenemos la cantidad de registros afectados por un procedimiento almacenado?
ADVERTENCIA: @@ROWCOUNT
puede devolver datos falsos si la tabla que está siendo modificada tiene activadores asociados.
¡El @@ROWCOUNT
devolverá el número de registros afectados por el GATILLO, no la declaración real!
Para Microsoft SQL Server puede devolver la variable @@ROWCOUNT
para devolver el número de filas afectadas por la última instrucción en el procedimiento almacenado.
Registre un parámetro de salida para el procedimiento almacenado y establezca el valor basado en @@ROWCOUNT
si usa SQL Server. Use SQL%ROWCOUNT
si está utilizando Oracle.
Tenga en cuenta que si tiene múltiples INSERT/UPDATE/DELETE
, necesitará una variable para almacenar el resultado de @@ROWCOUNT
para cada operación.
Resulta que SET NOCOUNT ON
se estableció en el script de procedimiento almacenado (de forma predeterminada en SQL Server Management Studio) y SqlCommand.ExecuteNonQuery();
siempre devuelto -1.
Simplemente lo configuré: SET NOCOUNT OFF
sin necesidad de usar @@ROWCOUNT
.
Más detalles aquí: SqlCommand.ExecuteNonQuery () devuelve -1 cuando se hace Insert / Update / Delete
@@RowCount
le dará la cantidad de registros afectados por una declaración de SQL.
El @@RowCount
solo funciona si lo emite inmediatamente después. Entonces, si está atrapando errores, debe hacerlo en la misma línea. Si lo divides, te perderás el segundo que elijas.
SELECT @NumRowsChanged = @@ROWCOUNT, @ErrorCode = @@ERROR
Si tiene varias declaraciones, deberá capturar el número de filas afectadas para cada una y sumarlas.
SELECT @NumRowsChanged = @NumRowsChanged + @@ROWCOUNT, @ErrorCode = @@ERROR