Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come ottenere il numero di righe inserite da una transazione

@@ROWCOUNT fornirà il numero di righe interessate dall'ultima SQL, è meglio acquisirlo in una variabile locale seguendo il comando in questione, poiché il suo valore cambierà la prossima volta che lo guarderai:

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]

USCITA:

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

(1 row(s) affected)

ottieni Rows valore di 2, il numero di righe inserite, ma ROWCOUNT è 1 perché SELECT @[email protected]@ROWCOUNT comando interessato 1 riga

se hai più INSERT o AGGIORNAMENTI, ecc. nella tua transazione, devi determinare come vorresti "contare" cosa sta succedendo. Potresti avere un totale separato per ogni tabella, un unico valore totale generale o qualcosa di completamente diverso. Dovrai DICHIARARE una variabile per ogni totale che desideri monitorare e aggiungervi dopo ogni operazione ad essa applicabile:

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