I SQL Server kan du bruge @@ROWCOUNT
systemfunktion til at returnere antallet af rækker, der er påvirket af den sidste T-SQL-sætning.
For eksempel, hvis en forespørgsel returnerer 4 rækker, @@ROWCOUNT
vender tilbage 4.
Eksempel 1 – Valg af data
Her er et grundlæggende eksempel for at demonstrere, hvordan det virker.
SELECT * FROM Dogs;
SELECT @@ROWCOUNT;
Resultat:
+---------+-----------+-----------+ | DogId | DogName | GoodDog | |---------+-----------+-----------| | 1 | Fetch | 0 | | 2 | Fluffy | 0 | | 3 | Wag | 0 | +---------+-----------+-----------+ (3 rows affected) +--------------------+ | (No column name) | |--------------------| | 3 | +--------------------+ (1 row affected)
I dette tilfælde er min SELECT
sætning returnerede 3 rækker, og så @@ROWCOUNT
returnerede 3.
Eksempel 2 – Opdatering af data
Her er et eksempel på brug af @@ROWCOUNT
med en OPDATERING
erklæring for at teste, om nogen rækker blev opdateret eller ej.
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
Resultat:
(0 rows affected) A dog outside the system cannot be a good dog
I dette tilfælde blev ingen rækker opdateret, fordi DogId'et ikke fandtes i tabellen. Vi var i stand til at bruge @@ROWCOUNT
med en IF
erklæring for at returnere en passende besked til brugeren.
Her er den igen, men denne gang findes hunden.
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
Resultat:
(1 row affected) Your dog will be rewarded accordingly
Ekstremt stort datasæt?
Hvis du tror, at antallet af rækker, der påvirkes af en erklæring, vil være mere end 2 milliarder, skal du bruge ROWCOUNT_BIG()
i stedet.
Du kan bruge det på samme måde som @@ROWCOUNT
bruges.
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
Resultat:
(0 rows affected) A dog outside the system cannot be a good dog
Når @@ROWCOUNT
er nulstillet
Udsagn såsom USE
, INDSTIL
DEALLOCATE CURSOR
, LUK MARKØR
, UDSKRIV
, RAISERROR
, BEGIN TRANSAKTIONEN
, eller KOMMITT TRANSAKTION
nulstil @@ROWCOUNT
værdi til 0
.
Kører SELECT @@ROWCOUNT
i sig selv vil også returnere 0
.