sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo obtener el número de filas insertadas por una transacción

@@ROWCOUNT dará el número de filas afectadas por el último instrucción SQL, es mejor capturarla en una variable local siguiendo el comando en cuestión, ya que su valor cambiará la próxima vez que la mire:

DECLARE @Rows int
DECLARE @TestTable table (col1 int, col2 int)
INSERT INTO @TestTable (col1, col2) select 1,2 union select 3,4
SELECT @[email protected]@ROWCOUNT
SELECT @Rows AS Rows,@@ROWCOUNT AS [ROWCOUNT]

SALIDA:

(2 row(s) affected)
Rows        ROWCOUNT
----------- -----------
2           1

(1 row(s) affected)

obtienes Rows valor de 2, el número de filas insertadas, pero ROWCOUNT es 1 porque SELECT @[email protected]@ROWCOUNT comando afectado 1 fila

si tiene múltiples INSERTOS o ACTUALIZACIONES, etc. en su transacción, debe determinar cómo le gustaría "contar" lo que está sucediendo. Podría tener un total separado para cada tabla, un solo valor total general o algo completamente diferente. Deberá DECLARAR una variable para cada total que desee rastrear y agregarla después de cada operación que se le aplique:

--note there is no error handling here, as this is a simple example
DECLARE @AppleTotal  int
DECLARE @PeachTotal  int

SELECT @AppleTotal=0,@PeachTotal=0

BEGIN TRANSACTION

INSERT INTO Apple (col1, col2) Select col1,col2 from xyz where ...
SET @[email protected][email protected]@ROWCOUNT

INSERT INTO Apple (col1, col2) Select col1,col2 from abc where ...
SET @[email protected][email protected]@ROWCOUNT

INSERT INTO Peach (col1, col2) Select col1,col2 from xyz where ...
SET @[email protected][email protected]@ROWCOUNT

INSERT INTO Peach (col1, col2) Select col1,col2 from abc where ...
SET @[email protected][email protected]@ROWCOUNT

COMMIT

SELECT @AppleTotal AS AppleTotal, @PeachTotal AS PeachTotal