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?

Respuestas:
Registre un parámetro de salida para el procedimiento almacenado y establezca el valor en función de
@@ROWCOUNTsi usa SQL Server. ÚseloSQL%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.fuente
@@RowCountle 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 = @@ERRORSi tiene varias declaraciones, deberá capturar la cantidad de filas afectadas para cada una y sumarlas.
SELECT @NumRowsChanged = @NumRowsChanged + @@ROWCOUNT, @ErrorCode = @@ERRORfuente
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
fuente
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.fuente
@@NÚMERO DE FILAS
fuente
ADVERTENCIA:
@@ROWCOUNTpuede devolver datos falsos si la tabla que se modifica tiene activadores adjuntos!El
@@ROWCOUNTdevolverá el número de registros afectados por el TRIGGER, ¡no la declaración real!fuente