sql >> Databáze >  >> RDS >> Sqlserver

Jak získat počet řádků vložených transakcí

@@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 @Rows=@@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 @Rows=@@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 @AppleTotal=@AppleTotal+@@ROWCOUNT

INSERT INTO Apple (col1, col2) Select col1,col2 from abc where ...
SET @AppleTotal=@AppleTotal+@@ROWCOUNT

INSERT INTO Peach (col1, col2) Select col1,col2 from xyz where ...
SET @PeachTotal=@PeachTotal+@@ROWCOUNT

INSERT INTO Peach (col1, col2) Select col1,col2 from abc where ...
SET @PeachTotal=@PeachTotal+@@ROWCOUNT

COMMIT

SELECT @AppleTotal AS AppleTotal, @PeachTotal AS PeachTotal


  1. Poskytuje nástroj mysql CLI způsob, jak zobrazit binární data způsobem přátelským ke konzole?

  2. PŘÍPAD Mysql PŘI PŘIPOJENÍ Chyba prohlášení

  3. Jak vrátit opravu po neúspěšné fázi přerušení v R12.2

  4. Je možné zacházet s pomlčkami a mezerami stejně v SQL?