Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So erhalten Sie die Anzahl der Zeilen, die von einer Transaktion eingefügt wurden

@@ROWCOUNT gibt die Anzahl der vom letzten betroffenen Zeilen an SQL-Anweisung ist es am besten, sie nach dem betreffenden Befehl in einer lokalen Variablen zu erfassen, da sich ihr Wert ändert, wenn Sie sie sich das nächste Mal ansehen:

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]

AUSGABE:

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

(1 row(s) affected)

Sie erhalten Rows Wert 2, die Anzahl der eingefügten Zeilen, aber ROWCOUNT ist 1, weil SELECT @[email protected]@ROWCOUNT Befehl betraf 1 Zeile

Wenn Sie mehrere INSERTs oder UPDATEs usw. in Ihrer Transaktion haben, müssen Sie bestimmen, wie Sie "zählen" möchten, was vor sich geht. Sie können für jede Tabelle eine separate Summe, einen einzelnen Gesamtsummenwert oder etwas völlig anderes haben. Sie müssen für jede Summe, die Sie nachverfolgen möchten, eine Variable DECLARE und ihr nach jeder Operation hinzufügen, die darauf zutrifft:

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