@@ROWCOUNT vil angive antallet af rækker, der er påvirket af den sidste SQL-sætning, er det bedst at indfange den i en lokal variabel efter den pågældende kommando, da dens værdi vil ændre sig, næste gang du ser på den:
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]
OUTPUT:
(2 row(s) affected)
Rows ROWCOUNT
----------- -----------
2 1
(1 row(s) affected)
du får Rows
værdien 2, antallet af indsatte rækker, men ROWCOUNT er 1, fordi SELECT @[email protected]@ROWCOUNT
kommando påvirket 1 række
hvis du har flere INDSÆT eller OPDATERINGER osv. i din transaktion, skal du bestemme, hvordan du vil "tælle", hvad der foregår. Du kan have en separat total for hvert bord, en enkelt total værdi eller noget helt andet. Du skal ERKLÆRE en variabel for hver total, du vil spore og tilføje til den efter hver handling, der gælder for 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