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
.