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 .