sql >> Database teknologi >  >> RDS >> Sqlserver

@@ROWCOUNT – Få antallet af rækker, der er berørt af den sidste sætning i SQL Server

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 .


  1. Kombiner flere resultater i en underforespørgsel til en enkelt kommasepareret værdi

  2. Hvordan opretter man en ny database med hstore-udvidelsen allerede installeret?

  3. Know-how til at gendanne slettede poster i SQL Server

  4. Sådan får du en liste over datoer mellem to datoer i mysql select-forespørgsel