sql >> Database >  >> RDS >> Sqlserver

Hoe SET ROWCOUNT werkt in SQL Server

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.


  1. SQLAlchemy:filteren op waarden die zijn opgeslagen in de geneste lijst van het JSONB-veld

  2. Hoe kan ik een afbeelding in een sqlite-database invoegen?

  3. Het volgnummer van een database-e-mailaccount binnen een profiel in SQL Server (T-SQL) wijzigen

  4. Pas op waar u op let