TOP (Transact-SQL)

Data aggiornamento: 17 novembre 2008

Specifica che verrà restituito solo il primo set di righe del risultato della query. Il set di righe può essere specificato come numero o come percentuale di righe. L'espressione TOP può essere utilizzata in istruzioni SELECT, INSERT, UPDATE e DELETE.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

[ 
     TOP (expression) [PERCENT]
     [ WITH TIES ]
]

Argomenti

  • expression
    Espressione numerica che specifica il numero di righe da restituire. Se viene specificato PERCENT, expression viene convertito in modo implicito in un valore float. In caso contrario, viene convertito in un valore bigint.

    Le parentesi che delimitano l'argomento expression nell'espressione TOP sono necessarie all'interno di istruzioni INSERT, UPDATE e DELETE. L'utilizzo di TOP expression senza parentesi all'interno di istruzioni SELECT è supportato per motivi di compatibilità con le versioni precedenti, ma non è consigliato.

    Se la query include una clausola ORDER BY, vengono restituite le prime righe corrispondenti al numero specificato in expression oppure alla percentuale specificata in expression, ordinate in base alla clausola ORDER BY. Se la query non include una clausola ORDER BY, l'ordine delle righe è arbitrario.

  • PERCENT
    Indica che la query restituisce solo le prime righe del set di risultati corrispondenti alla percentuale specificata in expression.
  • WITH TIES
    Specifica che devono essere restituite alcune righe aggiuntive del set di risultati di base, ovvero le righe che presentano lo stesso valore nelle colonne ORDER BY dell'ultima delle righe restituite da TOP n (PERCENT). È possibile specificare TOP...WITH TIES solo in istruzioni SELECT e solo se viene specificata una clausola ORDER BY.

    [!NOTA] L'ordine dei record di associazione restituiti è arbitrario. SORT BY non altera questa regola.

Osservazioni

L'espressione TOP non può essere utilizzata insieme a istruzioni UPDATE e DELETE su viste partizionate.

Le righe a cui viene fatto riferimento nell'espressione TOP utilizzata con INSERT, UPDATE o DELETE non sono ordinate. TOP n restituisce un numero n di righe casuali. L'istruzione INSERT seguente contiene ad esempio la clausola ORDER BY, che tuttavia non influisce sulle righe a cui viene fatto direttamente riferimento nell'istruzione INSERT.

INSERT TOP (2) INTO Table2 (ColumnB) 
     SELECT ColumnA FROM Table1 
     ORDER BY ColumnA

La clausola ORDER BY della query precedente fa riferimento solo alle righe restituite dall'istruzione SELECT nidificata. L'istruzione INSERT sceglie due righe qualsiasi tra quelle restituite dall'istruzione SELECT. Per garantire l'inserimento delle prime due righe della subquery SELECT, riscrivere la query come illustrato di seguito.

INSERT INTO Table2 (ColumnB) 
     SELECT TOP (2) ColumnA FROM Table1 
     ORDER BY ColumnA

Microsoft SQL Server 2005 consente di aggiornare viste create con la clausola TOP. Poiché la clausola TOP è inclusa nella definizione della vista, è possibile che alcune righe scompaiano dalla vista in seguito a un aggiornamento se il risultato non soddisfa più i requisiti dell'espressione TOP. Per ulteriori informazioni, vedere Modifica di dati tramite una vista.

Un'espressione TOP utilizzata in una query non ha effetto sulle istruzioni eventualmente eseguite a causa dell'attivazione di un trigger. Nelle tabelle inserite e aggiornate nei trigger verranno indicate solo le righe su cui l'istruzione INSERT, UPDATE o DELETE ha effetto.

Esempi

A. Utilizzo di TOP con variabili

Nell'esempio seguente viene utilizzata una variabile per ottenere i primi 10 dipendenti elencati nella tabella dbo.Employee del database AdventureWorks.

USE AdventureWorks ;
GO
DECLARE @p AS int
SET @p='10'
SELECT TOP(@p)*
FROM HumanResources.Employee;
GO

B. Utilizzo di TOP con PERCENT e WITH TIES

Nell'esempio seguente viene restituito il 10% di tutti i dipendenti che percepiscono lo stipendio più alto, in ordine decrescente in base alla retribuzione base. L'opzione WITH TIES garantisce che nel set di risultati vengano inclusi anche tutti i dipendenti con uno stipendio pari allo stipendio più basso restituito, anche se in tal caso il set restituito supererà il 10% dei dipendenti.

USE AdventureWorks ;
GO
SELECT TOP(10) PERCENT WITH TIES
c.FirstName, c.LastName, e.Title, e.Gender, r.Rate
FROM Person.Contact c 
INNER JOIN HumanResources.Employee e
ON c.ContactID = e.ContactID
INNER JOIN HumanResources.EmployeePayHistory r
ON r.EmployeeID = e.EmployeeID
ORDER BY Rate DESC;

Vedere anche

Riferimento

SELECT (Transact-SQL)
INSERT (Transact-SQL)
UPDATE (Transact-SQL)
DELETE (Transact-SQL)

Guida in linea e informazioni

Assistenza su SQL Server 2005

Cronologia modifiche

Versione Cronologia

17 novembre 2008

Contenuto modificato:
  • Aggiunta della nota alla descrizione dell'argomento WITH TIES.

5 dicembre 2005

Contenuto modificato:
  • Aggiornamento dell'esempio B.