@@ROWCOUNT fornecerá o número de linhas afetadas pelo último SQL, é melhor capturá-lo em uma variável local seguindo o comando em questão, pois seu valor mudará na próxima vez que você olhar para ele:
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]
RESULTADO:
(2 row(s) affected)
Rows ROWCOUNT
----------- -----------
2 1
(1 row(s) affected)
você obtém
Rows
valor de 2, o número de linhas inseridas, mas ROWCOUNT é 1 porque o SELECT @[email protected]@ROWCOUNT
comando afetou 1 linha se você tiver vários INSERTs ou UPDATEs, etc. em sua transação, você precisa determinar como você gostaria de "contar" o que está acontecendo. Você pode ter um total separado para cada mesa, um único valor total geral ou algo completamente diferente. Você precisará DECLARE uma variável para cada total que deseja rastrear e adicionar a ela seguindo cada operação que se aplica a ela:
--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