sql >> Database >  >> RDS >> Sqlserver

@@ROWCOUNT – Verkrijg het aantal rijen dat wordt beïnvloed door de laatste instructie in SQL Server

In SQL Server kunt u de @@ROWCOUNT . gebruiken systeemfunctie om het aantal rijen te retourneren dat is beïnvloed door de laatste T-SQL-instructie.

Als een zoekopdracht bijvoorbeeld 4 rijen retourneert, @@ROWCOUNT zal terugkeren 4.

Voorbeeld 1 – Gegevens selecteren

Hier is een eenvoudig voorbeeld om te laten zien hoe het werkt.

SELECT * FROM Dogs;
SELECT @@ROWCOUNT;

Resultaat:

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

In dit geval mijn SELECT instructie retourneerde 3 rijen, en dus @@ROWCOUNT geretourneerd 3.

Voorbeeld 2 – Gegevens bijwerken

Hier is een voorbeeld van het gebruik van @@ROWCOUNT met een UPDATE statement om te testen of er rijen zijn bijgewerkt.

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

Resultaat:

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

In dit geval zijn er geen rijen bijgewerkt omdat de DogId niet in de tabel bestond. We hebben @@ROWCOUNT . kunnen gebruiken met een IF statement om een ​​gepast bericht naar de gebruiker terug te sturen.

Hier is hij weer, maar deze keer bestaat de hond wel.

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

Resultaat:

(1 row affected)
Your dog will be rewarded accordingly

Extreem grote dataset?

Als u denkt dat het aantal rijen dat door een instructie wordt beïnvloed meer dan 2 miljard zal zijn, gebruikt u ROWCOUNT_BIG() in plaats daarvan.

Je kunt het op dezelfde manier gebruiken als @@ROWCOUNT wordt gebruikt.

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

Resultaat:

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

Wanneer @@ROWCOUNT is Reset

Uitspraken zoals USE , SET <option> , DEALLOCATE CURSOR , CLOSE CURSOR , PRINT , RAISERROR , BEGIN TRANSACTION , of COMMIT TRANSACTION reset de @@ROWCOUNT waarde tot 0 .

Uitvoeren van SELECT @@ROWCOUNT op zichzelf geeft ook 0 . terug .


  1. Hoe MariaDB op CentOS 8 te installeren en te beveiligen

  2. Introductie van nieuwe functie - Deadlock-analyse

  3. Wat is STATISTIEKENPROFIEL in SQL Server?

  4. Top 7 databases