Condividi tramite


Limitazione di set di risultati tramite le clausole TOP e PERCENT

È possibile utilizzare la clausola TOP per limitare il numero di righe restituite nel set di risultati.

TOP ( expression ) [ PERCENT ] [ WITH TIES ]

expression è un'espressione numerica che specifica il numero di righe da restituire oppure, se viene specificata la clausola PERCENT, expression indica la percentuale di righe restituite nel set di risultati. Ad esempio:

TOP (120) /*Return the top 120 rows of the result set. */
TOP (15) PERCENT /* Return the top 15 percent of the result set. */.
TOP(@n) /* Return the top @n rows of the result set, with the variable declaration: DECLARE @n AS BIGINT; SET @n = 2 */.

Se in un'istruzione SELECT che include la clausola TOP è inclusa anche la clausola ORDER BY, le righe da restituire vengono selezionate nel set di risultati ordinato. L'intero set di risultati viene creato nell'ordine specificato e vengono restituite le prime n righe del set di risultati ordinato. Se si specifica anche WITH TIES, vengono restituite tutte le righe contenenti l'ultimo valore restituito da ORDER BY, anche se in questo modo viene superato il numero specificato da expression.

TOP e SET ROWCOUNT

Un altro metodo per limitare le dimensioni di un set di risultati consiste nell'eseguire un'istruzione SET ROWCOUNT n prima di eseguire l'istruzione desiderata. Le differenze tra SET ROWCOUNT e TOP sono le seguenti:

  • La clausola TOP viene applicata solo all'istruzione SELECT in cui viene specificata, mentre SET ROWCOUNT rimane valida fino all'esecuzione di un'altra istruzione SET ROWCOUNT, ad esempio SET ROWCOUNT 0 per disattivare l'opzione.

    Nota importanteImportante

    L'utilizzo di SET ROWCOUNT non influirà sulle istruzioni DELETE, INSERT e UPDATE nella prossima versione di SQL Server. Evitare di utilizzare l'opzione SET ROWCOUNT con le istruzioni DELETE, INSERT e UPDATE in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata. È inoltre consigliabile riscrivere le istruzioni DELETE, INSERT e UPDATE che attualmente utilizzano SET ROWCOUNT, per fare in modo che utilizzino TOP.

    Sebbene l'effetto di SET ROWCOUNT nelle istruzioni SELECT rimanga invariato, con l'istruzione SELECT è consigliabile utilizzare TOP piuttosto che SET ROWCOUNT per i motivi seguenti:

    • SET ROWCOUNT provoca l'interruzione della maggior parte delle istruzioni SELECT, INSERT, UPDATE e DELETE quando viene raggiunto il numero di righe specificato. Questo comportamento si applica anche all'attivazione dei trigger.

    • Come parte di un'istruzione SELECT, in Query Optimizer il valore di expression nella clausola TOP può essere utilizzato nella generazione di un piano di esecuzione per una query. Poiché SET ROWCOUNT viene utilizzata al di fuori di un'istruzione che esegue una query, il suo valore non può essere utilizzato per generare un piano per una query.