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.
Convenzioni 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
Cronologia modifiche
Versione | Cronologia |
---|---|
17 novembre 2008 |
|
5 dicembre 2005 |
|