In SQL Server kunt u SET ROWCOUNT
. gebruiken om de rijen te beperken die door een query worden geretourneerd.
De manier waarop het werkt, is dat SQL Server stopt met het verwerken van de query nadat het opgegeven aantal rijen is geretourneerd.
Het is vergelijkbaar met de TOP()
clausule, maar met het verschil dat SET ROWCOUNT
wordt buiten de query ingesteld en is van invloed op alle volgende query's.
Voorbeeld
Hier is een voorbeeld om te demonstreren.
Laten we eerst een zoekopdracht uitvoeren zonder instelling ROWCOUNT
.
SELECT * FROM Dogs;
Resultaat:
+---------+-----------+ | DogId | DogName | |---------+-----------| | 1 | Fetch | | 2 | Fluffy | | 3 | Wag | | 1002 | Fetch | +---------+-----------+ (4 rows affected)
Er worden dus vier rijen geretourneerd zonder ROWCOUNT
in te stellen .
Laten we nu SET ROWCOUNT
gebruiken om het aantal rijen te beperken, voer de query vervolgens opnieuw uit.
SET ROWCOUNT 2;
SELECT * FROM Dogs;
Resultaat:
+---------+-----------+ | DogId | DogName | |---------+-----------| | 1 | Fetch | | 2 | Fluffy | +---------+-----------+ (2 rows affected)
Vervolgvragen
Zoals vermeld, SET ROWCOUNT
beïnvloedt alle volgende zoekopdrachten.
Als ik de volgende query direct na de vorige uitvoer, worden er ook twee rijen geretourneerd.
SELECT * FROM Cats;
Resultaat:
+---------+-----------+ | CatId | CatName | |---------+-----------| | 1 | Meow | | 2 | Fluffy | +---------+-----------+ (2 rows affected)
Dit ondanks het feit dat er drie rijen zouden zijn geretourneerd als ik SET ROWCOUNT
niet had gebruikt om de rijen die worden geretourneerd te beperken.
Ik kan dit verifiëren met de COUNT()
clausule.
SELECT COUNT(*) FROM Cats;
Resultaat:
+--------------------+ | (No column name) | |--------------------| | 3 | +--------------------+
ROWCOUNT resetten
U kunt de ROWCOUNT
reset resetten waarde door het een waarde van 0
. te geven (nul).
Dit betekent dat de resultaten van zoekopdrachten niet langer beperkt zijn. De zoekopdracht wordt tot het einde verwerkt.
SET ROWCOUNT 0;
SELECT * FROM Cats;
Resultaat:
+---------+-----------+ | CatId | CatName | |---------+-----------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | +---------+-----------+ (3 rows affected)
ROWCOUNT versus TOP()
Als u de TOP()
. gebruikt clausule in een zoekopdracht wanneer u uw ROWCOUNT
al heeft ingesteld , uw ROWCOUNT
instelling heeft alleen voorrang op TOP()
if ROWCOUNT
is de kleinere waarde.
Hier is een voorbeeld waarbij ROWCOUNT
is de grotere waarde.
SET ROWCOUNT 3;
SELECT TOP(2) * FROM Dogs;
Resultaat:
+---------+-----------+ | DogId | DogName | |---------+-----------| | 1 | Fetch | | 2 | Fluffy | +---------+-----------+ (2 rows affected)
In dit geval is de TOP()
clausule won.
En hier is een voorbeeld waarbij ROWCOUNT
is de kleinere waarde.
SET ROWCOUNT 1;
SELECT TOP(2) * FROM Dogs;
Resultaat:
+---------+-----------+ | DogId | DogName | |---------+-----------| | 1 | Fetch | +---------+-----------+ (1 row affected)
Compatibiliteit
Merk op dat Microsoft adviseert dat SET ROWCOUNT
heeft geen invloed op DELETE
, INSERT
, en UPDATE
instructies in een toekomstige versie van SQL Server. Microsoft raadt u aan dergelijk gebruik bij nieuw ontwikkelingswerk te vermijden en van plan te zijn om toepassingen aan te passen die het momenteel gebruiken.
Microsoft raadt het gebruik van de TOP()
. aan clausule als u rijen moet beperken die worden beïnvloed in DELETE
, INSERT
, en UPDATE
verklaringen.
Let op
De ROWCOUNT
optie werkt op de meeste T-SQL-instructies, inclusief triggers. Het heeft echter geen invloed op dynamische cursors, maar het beperkt wel de rijen van keyset en ongevoelige cursors. Deze optie moet daarom met de nodige voorzichtigheid worden gebruikt.