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.