@@ROWCOUNT kommer att ge antalet rader som påverkas av den senaste SQL-sats, är det bäst att fånga den i en lokal variabel efter kommandot i fråga, eftersom dess värde kommer att ändras nästa gång du tittar på det:
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]
UTGÅNG:
(2 row(s) affected)
Rows ROWCOUNT
----------- -----------
2 1
(1 row(s) affected)
du får Rows
värdet 2, antalet infogade rader, men ROWCOUNT är 1 eftersom SELECT @[email protected]@ROWCOUNT
kommandot påverkade 1 rad
om du har flera INSERT eller UPPDATERINGAR, etc. i din transaktion, måste du bestämma hur du vill "räkna" vad som pågår. Du kan ha en separat summa för varje bord, ett enda totalvärde eller något helt annat. Du måste DEKLARERA en variabel för varje totalsumma du vill spåra och lägga till efter varje operation som gäller den:
--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