¿Cómo puedo obtener el número de registros afectados por un procedimiento almacenado?


86

Para INSERT, UPDATEy DELETElas sentencias SQL 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 es siempre -1.

¿Cómo obtenemos el número de registros afectados por un procedimiento almacenado?


1
Set No Count también era mi problema. Para probar, ejecute su procedimiento almacenado en Management Studio y vea si obtiene recuentos, si lo hace, asegúrese de tener una variable de salida.
user2624356

Respuestas:


80

Registre un parámetro de salida para el procedimiento almacenado y establezca el valor en función de @@ROWCOUNTsi usa SQL Server. Úselo SQL%ROWCOUNTsi está utilizando Oracle.

Tenga en cuenta que si tiene varios INSERT/UPDATE/DELETE, necesitará una variable para almacenar el resultado de @@ROWCOUNTcada operación.


46

@@RowCount le dará el número de registros afectados por una instrucción SQL.

El @@RowCountsólo funciona si se emite inmediatamente después. Entonces, si está capturando errores, debe hacerlo en la misma línea. Si lo divide, se perderá el que coloque en segundo lugar.

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

Si tiene varias declaraciones, deberá capturar la cantidad de filas afectadas para cada una y sumarlas.

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

33

Resulta para mí que SET NOCOUNT ONse configuró en el script del procedimiento almacenado (de forma predeterminada en SQL Server Management Studio) ySqlCommand.ExecuteNonQuery(); siempre devolvió -1.

Simplemente lo activé: SET NOCOUNT OFFsin necesidad de usarlo @@ROWCOUNT.

Más detalles encontrados aquí: SqlCommand.ExecuteNonQuery () devuelve -1 al hacer Insert / Update / Delete


Esto funciona para mi. Mi proceso almacenado es solo una simple declaración de inserción, y parece estar funcionando. ¡Gracias!
Harvey Darvey

¡Gracias! Buen trabajo en la referencia.
Leo Gurdian

8

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



Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.