In SQL Server puoi utilizzare SET ROWCOUNT
per limitare le righe restituite da una query.
Il modo in cui funziona è che provoca l'interruzione dell'elaborazione della query da parte di SQL Server dopo la restituzione del numero di righe specificato.
È simile a TOP()
clausola, ma con la differenza che SET ROWCOUNT
è impostato al di fuori della query e influirà su tutte le query successive.
Esempio
Ecco un esempio da dimostrare.
Per prima cosa, eseguiamo una query senza impostando ROWCOUNT
.
SELECT * FROM Dogs;
Risultato:
+---------+-----------+ | DogId | DogName | |---------+-----------| | 1 | Fetch | | 2 | Fluffy | | 3 | Wag | | 1002 | Fetch | +---------+-----------+ (4 rows affected)
Quindi vengono restituite quattro righe senza impostare ROWCOUNT
.
Ora utilizziamo SET ROWCOUNT
per limitare il numero di righe, quindi eseguire nuovamente la query.
SET ROWCOUNT 2;
SELECT * FROM Dogs;
Risultato:
+---------+-----------+ | DogId | DogName | |---------+-----------| | 1 | Fetch | | 2 | Fluffy | +---------+-----------+ (2 rows affected)
Query successive
Come accennato, SET ROWCOUNT
influisce su tutte le query successive.
Se eseguo la query seguente subito dopo la precedente, vengono restituite anche due righe.
SELECT * FROM Cats;
Risultato:
+---------+-----------+ | CatId | CatName | |---------+-----------| | 1 | Meow | | 2 | Fluffy | +---------+-----------+ (2 rows affected)
Questo nonostante il fatto che sarebbero state restituite tre righe, se non avessi usato SET ROWCOUNT
per limitare le righe restituite.
Posso verificarlo con COUNT()
clausola.
SELECT COUNT(*) FROM Cats;
Risultato:
+--------------------+ | (No column name) | |--------------------| | 3 | +--------------------+
Reimposta ROWCOUNT
Puoi reimpostare il ROWCOUNT
value assegnandogli un valore di 0
(zero).
Ciò significa che le query non avranno più risultati limitati. La query continuerà l'elaborazione fino alla fine.
SET ROWCOUNT 0;
SELECT * FROM Cats;
Risultato:
+---------+-----------+ | CatId | CatName | |---------+-----------| | 1 | Meow | | 2 | Fluffy | | 3 | Scratch | +---------+-----------+ (3 rows affected)
ROWCOUNT vs TOP()
Se usi TOP()
clausola in una query quando hai già impostato il tuo ROWCOUNT
, il tuo ROWCOUNT
l'impostazione sovrascriverà solo TOP()
se ROWCOUNT
è il valore più piccolo.
Ecco un esempio in cui ROWCOUNT
è il valore maggiore.
SET ROWCOUNT 3;
SELECT TOP(2) * FROM Dogs;
Risultato:
+---------+-----------+ | DogId | DogName | |---------+-----------| | 1 | Fetch | | 2 | Fluffy | +---------+-----------+ (2 rows affected)
In questo caso, il TOP()
la clausola ha vinto.
Ed ecco un esempio in cui ROWCOUNT
è il valore più piccolo.
SET ROWCOUNT 1;
SELECT TOP(2) * FROM Dogs;
Risultato:
+---------+-----------+ | DogId | DogName | |---------+-----------| | 1 | Fetch | +---------+-----------+ (1 row affected)
Compatibilità
Tieni presente che Microsoft consiglia di SET ROWCOUNT
non influirà su DELETE
, INSERT
e UPDATE
istruzioni in una versione futura di SQL Server. Microsoft consiglia di evitare tale utilizzo nel nuovo lavoro di sviluppo e di pianificare la modifica delle applicazioni che attualmente lo utilizzano.
Microsoft consiglia di utilizzare TOP()
clausola se è necessario limitare le righe interessate in DELETE
, INSERT
e UPDATE
dichiarazioni.
Attenzione
Il ROWCOUNT
l'opzione funziona sulla maggior parte delle istruzioni T-SQL, inclusi i trigger. Tuttavia, non influisce sui cursori dinamici, ma limita il set di righe di keyset e cursori insensibili. Questa opzione dovrebbe quindi essere utilizzata con cautela.