Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment obtenir le nombre de lignes insérées par une transaction

@@ROWCOUNT donnera le nombre de lignes affectées par le dernier Instruction SQL, il est préférable de la capturer dans une variable locale à la suite de la commande en question, car sa valeur changera la prochaine fois que vous la regarderez :

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]

SORTIE :

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

(1 row(s) affected)

vous obtenez des Rows valeur de 2, le nombre de lignes insérées, mais ROWCOUNT est 1 car le SELECT @[email protected]@ROWCOUNT commande affectée 1 ligne

si vous avez plusieurs INSERTS ou UPDATE, etc. dans votre transaction, vous devez déterminer comment vous souhaitez "compter" ce qui se passe. Vous pourriez avoir un total distinct pour chaque table, une valeur totale unique ou quelque chose de complètement différent. Vous devrez DÉCLARER une variable pour chaque total que vous souhaitez suivre et y ajouter après chaque opération qui s'y applique :

--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