@@ROWCOUNT udává počet řádků ovlivněných posledním SQL, je nejlepší jej zachytit do lokální proměnné následující za daným příkazem, protože jeho hodnota se změní, až se na něj příště podíváte:
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]
VÝSTUP:
(2 row(s) affected)
Rows ROWCOUNT
----------- -----------
2 1
(1 row(s) affected)
získáte Rows
hodnota 2, počet vložených řádků, ale ROWCOUNT je 1, protože SELECT @[email protected]@ROWCOUNT
příkaz ovlivnil 1 řádek
pokud máte v transakci více INSERTů nebo AKTUALIZACÍ atd., musíte určit, jak chcete „počítat“, co se děje. Můžete mít samostatný součet pro každou tabulku, jednu celkovou hodnotu nebo něco úplně jiného. Pro každý součet, který chcete sledovat, budete muset DECLARE proměnnou a přidat k ní po každé operaci, která se na ni vztahuje:
--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