In SQL Server können Sie SET ROWCOUNT
verwenden um die von einer Abfrage zurückgegebenen Zeilen einzuschränken.
Es bewirkt, dass SQL Server die Verarbeitung der Abfrage stoppt, nachdem die angegebene Anzahl von Zeilen zurückgegeben wurde.
Es ähnelt dem TOP()
-Klausel, aber mit dem Unterschied, dass SET ROWCOUNT
wird außerhalb der Abfrage gesetzt und wirkt sich auf alle nachfolgenden Abfragen aus.
Beispiel
Hier ist ein Beispiel zur Veranschaulichung.
Lassen Sie uns zuerst eine Abfrage ohne durchführen Einstellung von ROWCOUNT
.
SELECT * FROM Dogs;
Ergebnis:
+---------+-----------+ | DogId | DogName | |---------+-----------| | 1 | Fetch | | 2 | Fluffy | | 3 | Wag | | 1002 | Fetch | +---------+-----------+ (4 rows affected)
Es werden also vier Zeilen zurückgegeben, ohne dass ROWCOUNT
gesetzt wird .
Lassen Sie uns nun SET ROWCOUNT
verwenden um die Anzahl der Zeilen zu begrenzen, führen Sie die Abfrage dann erneut aus.
SET ROWCOUNT 2;
SELECT * FROM Dogs;
Ergebnis:
+---------+-----------+ | DogId | DogName | |---------+-----------| | 1 | Fetch | | 2 | Fluffy | +---------+-----------+ (2 rows affected)
Nachträgliche Abfragen
Wie bereits erwähnt, SET ROWCOUNT
wirkt sich auf alle nachfolgenden Abfragen aus.
Wenn ich die folgende Abfrage unmittelbar nach der vorherigen ausführe, werden auch zwei Zeilen zurückgegeben.
SELECT * FROM Cats;
Ergebnis:
+---------+-----------+ | CatId | CatName | |---------+-----------| | 1 | Meow | | 2 | Fluffy | +---------+-----------+ (2 rows affected)
Dies trotz der Tatsache, dass drei Zeilen zurückgegeben worden wären, wenn ich nicht SET ROWCOUNT
verwendet hätte um die zurückgegebenen Zeilen zu begrenzen.
Ich kann dies mit dem COUNT()
überprüfen Klausel.
SELECT COUNT(*) FROM Cats;
Ergebnis:
+--------------------+ | (No column name) | |--------------------| | 3 | +--------------------+
ROWCOUNT zurücksetzen
Sie können ROWCOUNT
zurücksetzen Wert, indem Sie ihm den Wert 0
zuweisen (Null).
Das bedeutet, dass die Ergebnisse von Abfragen nicht mehr eingeschränkt werden. Die Abfrage wird bis zum Ende weiter verarbeitet.
SET ROWCOUNT 0;
SELECT * FROM Cats;
Ergebnis:
+---------+-----------+ | CatId | CatName | |---------+-----------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | +---------+-----------+ (3 rows affected)
ROWCOUNT vs. TOP()
Wenn Sie den TOP()
verwenden -Klausel in einer Abfrage, wenn Sie Ihren ROWCOUNT
bereits festgelegt haben , Ihr ROWCOUNT
Die Einstellung überschreibt nur TOP()
wenn ROWCOUNT
ist der kleinere Wert.
Hier ist ein Beispiel, in dem ROWCOUNT
ist der größere Wert.
SET ROWCOUNT 3;
SELECT TOP(2) * FROM Dogs;
Ergebnis:
+---------+-----------+ | DogId | DogName | |---------+-----------| | 1 | Fetch | | 2 | Fluffy | +---------+-----------+ (2 rows affected)
In diesem Fall das TOP()
Klausel hat sich durchgesetzt.
Und hier ist ein Beispiel, in dem ROWCOUNT
ist der kleinere Wert.
SET ROWCOUNT 1;
SELECT TOP(2) * FROM Dogs;
Ergebnis:
+---------+-----------+ | DogId | DogName | |---------+-----------| | 1 | Fetch | +---------+-----------+ (1 row affected)
Kompatibilität
Beachten Sie, dass Microsoft zu SET ROWCOUNT
rät wirkt sich nicht auf DELETE
aus , INSERT
, und UPDATE
-Anweisungen in einer zukünftigen Version von SQL Server. Microsoft empfiehlt, dass Sie eine solche Verwendung in neuen Entwicklungsarbeiten vermeiden und planen, Anwendungen zu ändern, die es derzeit verwenden.
Microsoft empfiehlt die Verwendung von TOP()
-Klausel, wenn Sie die betroffenen Zeilen in DELETE
einschränken müssen , INSERT
, und UPDATE
Aussagen.
Achtung
Der ROWCOUNT
Option funktioniert bei den meisten T-SQL-Anweisungen, einschließlich Triggern. Es wirkt sich jedoch nicht auf dynamische Cursor aus, schränkt jedoch das Rowset von Keyset- und insensitiven Cursorn ein. Diese Option sollte daher mit Vorsicht verwendet werden.