Pregunta

Para las sentencias de SQL INSERT , UPDATE y DELETE ejecutadas directamente contra la base de datos, la mayoría de los proveedores de bases de datos devuelven el recuento de filas afectadas. Para los procedimientos almacenados, el número de registros afectados siempre es -1 .

¿Cómo obtenemos la cantidad de registros afectados por un procedimiento almacenado?

¿Fue útil?

Solución

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á usando 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.

Otros consejos

@@ RowCount le dará el número de registros afectados por una declaración 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 divide, perderá el que ponga en segundo lugar.

SELECT @NumRowsChanged = @@ROWCOUNT, @ErrorCode = @@ERROR

Si tiene varias declaraciones, tendrá que capturar el número de filas afectadas para cada una y sumarlas.

SELECT @NumRowsChanged = @NumRowsChanged  + @@ROWCOUNT, @ErrorCode = @@ERROR

Resulta para mí que SET NOCOUNT ON se configuró en el script del procedimiento almacenado (de manera predeterminada en SQL Server Management Studio) y SqlCommand.ExecuteNonQuery (); siempre se devolvió -1.

Acabo de activarlo: SET NOCOUNT OFF sin necesidad de usar @@ ROWCOUNT .

Más detalles que se encuentran aquí: SqlCommand.ExecuteNonQuery () devuelve -1 al hacer Insertar / Actualizar / Eliminar

Para Microsoft SQL Server, puede devolver la variable @@ ROWCOUNT para devolver el número de filas afectadas por la última declaración en el procedimiento almacenado.

ADVERTENCIA: @@ ROWCOUNT puede devolver datos falsos si la tabla que se está modificando tiene activadores adjuntos a ella!

El @@ ROWCOUNT devolverá el número de registros afectados por el GATILLO, no la declaración real.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top