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

@@ROWCOUNT – získat počet řádků ovlivněných posledním příkazem na serveru SQL

V SQL Server můžete použít @@ROWCOUNT systémová funkce, která vrátí počet řádků ovlivněných posledním příkazem T-SQL.

Pokud například dotaz vrátí 4 řádky, @@ROWCOUNT vrátí 4.

Příklad 1 – Výběr dat

Zde je základní příklad, který demonstruje, jak to funguje.

SELECT * FROM Dogs;
SELECT @@ROWCOUNT;

Výsledek:

+---------+-----------+-----------+
| DogId   | DogName   | GoodDog   |
|---------+-----------+-----------|
| 1       | Fetch     | 0         |
| 2       | Fluffy    | 0         |
| 3       | Wag       | 0         |
+---------+-----------+-----------+
(3 rows affected)
+--------------------+
| (No column name)   |
|--------------------|
| 3                  |
+--------------------+
(1 row affected)

V tomto případě můj SELECT příkaz vrátil 3 řádky, a tak @@ROWCOUNT vráceno 3.

Příklad 2 – Aktualizace dat

Zde je příklad použití @@ROWCOUNT s UPDATE příkazem otestovat, zda byly některé řádky aktualizovány.

UPDATE Dogs 
SET GoodDog = 1
WHERE DogId = 4
IF @@ROWCOUNT > 0
    PRINT 'Your dog will be rewarded accordingly';
ELSE
    PRINT 'A dog outside the system cannot be a good dog'
GO

Výsledek:

(0 rows affected)
A dog outside the system cannot be a good dog

V tomto případě nebyly aktualizovány žádné řádky, protože DogId v tabulce neexistovalo. Podařilo se nám použít @@ROWCOUNT s IF příkaz k vrácení příslušné zprávy uživateli.

Tady je to znovu, ale tentokrát pes existuje.

UPDATE Dogs 
SET GoodDog = 1
WHERE DogId = 1
IF @@ROWCOUNT > 0
    PRINT 'Your dog will be rewarded accordingly';
ELSE
    PRINT 'A dog outside the system cannot be a good dog'
GO

Výsledek:

(1 row affected)
Your dog will be rewarded accordingly

Extrémně velký soubor dat?

Pokud si myslíte, že počet řádků ovlivněných výpisem bude více než 2 miliardy, použijte ROWCOUNT_BIG() místo toho.

Můžete jej použít stejným způsobem jako @@ROWCOUNT se používá.

UPDATE Dogs 
SET GoodDog = 1
WHERE DogId = 4
IF ROWCOUNT_BIG() > 0
    PRINT 'Your dog will be rewarded accordingly';
ELSE
    PRINT 'A dog outside the system cannot be a good dog'
GO

Výsledek:

(0 rows affected)
A dog outside the system cannot be a good dog

Když @@ROWCOUNT je Resetovat

Příkazy jako USE , SET <option> , DEALLOCATE CURSOR , CLOSE CURSOR , PRINT , RAISERROR , BEGIN TRANSACTION nebo COMMIT TRANSACTION resetujte @@ROWCOUNT hodnotu na 0 .

Spuštění SELECT @@ROWCOUNT sám o sobě také vrátí 0 .


  1. Používání úložiště Intel Optane pro SQL Server

  2. Jak spustit skript Oracle sql prostřednictvím kódu Java

  3. Výhody PostgreSQL

  4. Jak mohu zadat jeden příkaz z příkazového řádku přes sql plus?