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 del set di risultati restituite. 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 si specifica 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 viene specificata anche la clausola 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

Per limitare le dimensioni di un set di risultati, è inoltre possibile eseguire un'istruzione SET ROWCOUNT n prima di eseguire l'istruzione desiderata. Le differenze tra SET ROWCOUNT e TOP sono le seguenti:

  • Il limite definito dall'istruzione SET ROWCOUNT viene applicato in fase di creazione delle righe del set di risultati dopo la valutazione della clausola ORDER BY. Quando si specifica ORDER BY, l'istruzione SELECT viene interrotta dopo che sono state selezionate n righe da un gruppo di valori ordinato in base alla classificazione ORDER BY specificata.
  • La clausola TOP viene applicata solo all'istruzione SELECT in cui è stata specificata, mentre SET ROWCOUNT rimane valida fino all'esecuzione di un'altra istruzione SET ROWCOUNT, ad esempio SET ROWCOUNT 0 per disattivare l'opzione.
    ms187043.note(it-it,SQL.90).gifImportante:
    L'utilizzo di SET ROWCOUNT non avrà effetti 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 della query per una query.

Vedere anche

Altre risorse

TOP (Transact-SQL)
SELECT (Transact-SQL)
SET ROWCOUNT (Transact-SQL)

Guida in linea e informazioni

Assistenza su SQL Server 2005