Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

@@ROWCOUNT – Ruft die Anzahl der Zeilen ab, die von der letzten Anweisung in SQL Server betroffen sind

In SQL Server können Sie den @@ROWCOUNT verwenden Systemfunktion, um die Anzahl der von der letzten T-SQL-Anweisung betroffenen Zeilen zurückzugeben.

Wenn eine Abfrage beispielsweise 4 Zeilen zurückgibt, @@ROWCOUNT gibt 4 zurück.

Beispiel 1 – Auswahl von Daten

Hier ist ein einfaches Beispiel, um zu demonstrieren, wie es funktioniert.

SELECT * FROM Dogs;
SELECT @@ROWCOUNT;

Ergebnis:

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

In diesem Fall mein SELECT -Anweisung gab 3 Zeilen zurück, also @@ROWCOUNT zurückgegeben 3.

Beispiel 2 – Aktualisieren von Daten

Hier ist ein Beispiel für die Verwendung von @@ROWCOUNT mit einem UPDATE -Anweisung, um zu testen, ob Zeilen aktualisiert wurden oder nicht.

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

Ergebnis:

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

In diesem Fall wurden keine Zeilen aktualisiert, da die DogId nicht in der Tabelle vorhanden war. Wir konnten @@ROWCOUNT verwenden mit einem IF -Anweisung, um eine entsprechende Nachricht an den Benutzer zurückzugeben.

Hier ist er wieder, aber diesmal existiert der Hund.

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

Ergebnis:

(1 row affected)
Your dog will be rewarded accordingly

Extrem großer Datensatz?

Wenn Sie glauben, dass die Anzahl der von einer Anweisung betroffenen Zeilen mehr als 2 Milliarden betragen wird, verwenden Sie ROWCOUNT_BIG() stattdessen.

Sie können es genauso verwenden wie @@ROWCOUNT verwendet wird.

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

Ergebnis:

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

Wenn @@ROWCOUNT wird zurückgesetzt

Anweisungen wie USE , SET <option> , DEALLOCATE CURSOR , CLOSE CURSOR , PRINT , RAISERROR , BEGIN TRANSACTION , oder COMMIT TRANSACTION setzen Sie @@ROWCOUNT zurück Wert auf 0 .

Ausführen von SELECT @@ROWCOUNT selbst wird auch 0 zurückgeben .