Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como obter o número de linhas inseridas por uma transação


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