TOP (Transact-SQL)TOP (Transact-SQL)

SI APPLICA A: sìSQL Server (a partire dalla versione 2008) sìDatabase SQL di AzuresìAzure SQL Data Warehouse sìParallel Data Warehouse APPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Limita le righe restituite nel set di risultati di una query a un numero specificato o a una percentuale di righe in SQL Server 2017SQL Server 2017.Limits the rows returned in a query result set to a specified number of rows or percentage of rows in SQL Server 2017SQL Server 2017. Quando si usa TOP con la clausola ORDER BY, il set di risultati è limitato alle prime N righe ordinate.When you use TOP with the ORDER BY clause, the result set is limited to the first N number of ordered rows. In caso contrario, TOP restituisce le prime N righe in un ordine non definito.Otherwise, TOP returns the first N number of rows in an undefined order. Usare questa clausola per specificare il numero di righe restituito da un'istruzione SELECT.Use this clause to specify the number of rows returned from a SELECT statement. In alternativa, usare TOP per specificare le righe interessate da un'istruzione INSERT, UPDATE, MERGE o DELETE.Or, use TOP to specify the rows affected by an INSERT, UPDATE, MERGE, or DELETE statement.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintassiSyntax

Di seguito è riportata la sintassi per SQL Server e il database SQL di Azure:Following is the syntax for SQL Server and Azure SQL Database:

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

Di seguito è riportata la sintassi per Azure SQL Data Warehouse e Parallel Data Warehouse:Following is syntax for Azure SQL Data Warehouse and Parallel Data Warehouse:

[   
    TOP ( expression )   
    [ WITH TIES ]  
]  

ArgomentiArguments

expressionexpression
Espressione numerica che specifica il numero di righe da restituire.The numeric expression that specifies the number of rows to be returned. Se si specifica PERCENT, viene eseguita la conversione implicita di expression in un valore float.expression is implicitly converted to a float value if you specify PERCENT. In caso contrario, l'argomento expression viene convertito in bigint.Otherwise, expression is converted to bigint.

PERCENTPERCENT
Indica che la query restituisce solo la prima percentuale expression di righe dal set di risultati.Indicates that the query returns only the first expression percent of rows from the result set. I valori frazionari vengono arrotondati al valore intero più vicino.Fractional values are rounded up to the next integer value.

WITH TIESWITH TIES
Restituisce due o più righe con valori equivalenti per l'ultima posizione del set di risultati limitato.Returns two or more rows that tie for last place in the limited results set. È necessario usare questo argomento con la clausola ORDER BY.You must use this argument with the ORDER BY clause. WITH TIES potrebbe causare la restituzione di un numero di righe maggiore rispetto al valore specificato in expression.WITH TIES might cause more rows to be returned than the value specified in expression. Se l'argomento expression è impostato su 5 ma ai valori delle colonne ORDER BY nella riga 5 corrispondono due righe in più, ad esempio, il set di risultati conterrà sette righe.For example, if expression is set to 5 but two additional rows match the values of the ORDER BY columns in row 5, the result set will contain seven rows.

È possibile specificare la clausola TOP con l'argomento WITH TIES solo nelle istruzioni SELECT e solo se viene usata anche la clausola ORDER BY.You can specify the TOP clause with the WITH TIES argument only in SELECT statements, and only if you've also specified the ORDER BY clause. L'ordine restituito per l'associazione dei record è arbitrario.The returned order of tying records is arbitrary. ORDER BY non influisce su questa regola.ORDER BY doesn't affect this rule.

Procedure consigliateBest Practices

In un'istruzione SELECT utilizzare sempre una clausola ORDER BY con la clausola TOP.In a SELECT statement, always use an ORDER BY clause with the TOP clause. È infatti l'unico modo per indicare in modo prevedibile le righe interessate dalla clausola TOP.Because, it's the only way to predictably indicate which rows are affected by TOP.

Utilizzare OFFSET e FETCH nella clausola ORDER BY anziché la clausola TOP per implementare una soluzione di paging delle query.Use OFFSET and FETCH in the ORDER BY clause instead of the TOP clause to implement a query paging solution. Una soluzione di paging, ovvero l'invio di blocchi o "pagine" di dati al client, è di più facile implementazione con le clausole OFFSET e FETCH.A paging solution (that is, sending chunks or "pages" of data to the client) is easier to implement using OFFSET and FETCH clauses. Per altre informazioni, vedere Clausola ORDER BY (Transact-SQL).For more information, see ORDER BY Clause (Transact-SQL).

Utilizzare TOP (o OFFSET e FETCH) anziché SET ROWCOUNT per limitare il numero di righe restituite.Use TOP (or OFFSET and FETCH) instead of SET ROWCOUNT to limit the number of rows returned. Questi metodi vengono preferiti all'utilizzo di SET ROWCOUNT per i motivi seguenti:These methods are preferred over using SET ROWCOUNT for the following reasons:

  • Come parte di un'istruzione SELECT, in Query Optimizer il valore di expression nella clausola TOP o FETCH può essere preso in considerazione durante l'ottimizzazione della query.As a part of a SELECT statement, the query optimizer can consider the value of expression in the TOP or FETCH clauses during query optimization. Dato che si usa SET ROWCOUNT al di fuori di un'istruzione che esegue una query, il relativo valore non può essere considerato in un piano di query.Because you use SET ROWCOUNT outside of a statement that runs a query, its value can't be considered in a query plan.

Informazioni sulla compatibilitàCompatibility Support

Per garantire la compatibilità con le versioni precedenti, le parentesi sono facoltative nelle istruzioni SELECT.For backward compatibility, the parentheses are optional in SELECT statements. È consigliabile usare sempre le parentesi per TOP nelle istruzioni SELECT,We recommend that you always use parentheses for TOP in SELECT statements. in modo da mantenere la coerenza con l'uso obbligatorio nelle istruzioni INSERT, UPDATE, MERGE e DELETE.Doing so provides consistency with its required use in INSERT, UPDATE, MERGE, and DELETE statements.

InteroperabilitàInteroperability

L'espressione di TOP non influisce sulle istruzioni eventualmente eseguite a causa di un trigger.The TOP expression doesn't affect statements that might run because of a trigger. Le tabelle inserted e deleted nei trigger restituiscono solo le righe effettivamente interessate dalle istruzioni INSERT, UPDATE, MERGE o DELETE.The inserted and deleted tables in the triggers return only the rows that are truly affected by the INSERT, UPDATE, MERGE, or DELETE statements. Questo si verifica ad esempio se un trigger INSERT viene attivato come risultato di un'istruzione INSERT in cui è stata usata una clausola TOP.For example, if an INSERT TRIGGER fires as the result of an INSERT statement that used a TOP clause.

SQL ServerSQL Server consente l'aggiornamento delle righe attraverso le viste.allows for updating rows through views. Dato che è possibile includere la clausola TOP nella definizione della vista, alcune righe potrebbero non essere più presenti nella vista se a causa di un aggiornamento non soddisfano più i requisiti dell'espressione di TOP.Because you can include the TOP clause in the view definition, certain rows may disappear from the view if the rows no longer meet the requirements of the TOP expression due to an update.

Quando viene specificata nell'istruzione MERGE, la clausola TOP si applica dopo l'unione in join dell'intera tabella di origine e dell'intera tabella di destinazione.When specified in the MERGE statement, the TOP clause applies after the entire source table and the entire target table are joined. Le righe unite in join non qualificate per un'azione di inserimento, aggiornamento o eliminazione, inoltre, vengono rimosse.And, the joined rows that don't qualify for an insert, update, or delete action are removed. La clausola TOP riduce ulteriormente il numero di righe unite in join in base al valore specificato e l'azione di inserimento, aggiornamento o eliminazione si applica alle restanti righe unite in join in modo non ordinato.The TOP clause further reduces the number of joined rows to the specified value and the insert, update, or delete actions apply to the remaining joined rows in an unordered way. Ciò significa che le righe vengono distribuite tra le azioni definite nelle clausole WHEN senza alcun ordine.That is, there's no order in which the rows are distributed among the actions defined in the WHEN clauses. Se specificando TOP (10) le righe interessate sono 10, ad esempio, sette di queste righe potrebbero essere aggiornate e tre inseriteFor example, if specifying TOP (10) affects 10 rows, of these rows, seven may be updated and three inserted. oppure una potrebbe essere eliminata, cinque aggiornate e quattro inserite e così via.Or, one may be deleted, five updated, and four inserted, and so on. Dato che l'istruzione MERGE esegue una scansione di tabella completa sulle tabelle sia di origine che di destinazione, l'uso della clausola TOP per modificare una tabella di grandi dimensioni creando più batch può influire sulle prestazioni di I/O.Because the MERGE statement does a full table scan of both the source and target tables, I/O performance can be affected when you use the TOP clause to modify a large table by creating multiple batches. In questo scenario è importante assicurarsi che tutti i batch successivi abbiano come destinazione nuove righe.In this scenario, it's important to ensure that all successive batches target new rows.

Prestare attenzione quando si specifica la clausola TOP in una query contenente un operatore UNION, UNION ALL, EXCEPT o INTERSECT.Use caution when you're specifying the TOP clause in a query that contains a UNION, UNION ALL, EXCEPT, or INTERSECT operator. È possibile scrivere una query che restituisce risultati imprevisti perché l'ordine in cui le clausole TOP e ORDER BY vengono elaborate logicamente non è sempre intuitivo quando questi operatori vengono usati in un'operazione di selezione.It's possible to write a query that returns unexpected results because the order in which the TOP and ORDER BY clauses are logically processed isn't always intuitive when these operators are used in a select operation. Ad esempio, considerati i dati e la tabella seguenti, si supponga di voler ottenere come risultato la macchina rossa meno costosa e la macchina blu più costosa,For example, given the following table and data, assume that you want to return the least expensive red car and the least expensive blue car. ovvero la berlina rossa e il furgone blu.That is, the red sedan and the blue van.

CREATE TABLE dbo.Cars(Model varchar(15), Price money, Color varchar(10));  
INSERT dbo.Cars VALUES  
    ('sedan', 10000, 'red'), ('convertible', 15000, 'blue'),   
    ('coupe', 20000, 'red'), ('van', 8000, 'blue');  

Per ottenere questi risultati, è possibile scrivere la query seguente.To achieve these results, you might write the following query.

SELECT TOP(1) Model, Color, Price  
FROM dbo.Cars  
WHERE Color = 'red'  
UNION ALL  
SELECT TOP(1) Model, Color, Price  
FROM dbo.Cars  
WHERE Color = 'blue'  
ORDER BY Price ASC;  
GO    

Di seguito è riportato il set di risultati.Following is the result set.

Model         Color      Price  
------------- ---------- -------  
sedan         red        10000.00  
convertible   blue       15000.00

Vengono restituiti risultati imprevisti perché la clausola TOP viene eseguita logicamente prima della clausola ORDER BY che ordina i risultati dell'operatore (in questo caso UNION ALL).The unexpected results are returned because the TOP clause logically runs before the ORDER BY clause, which sorts the results of the operator (UNION ALL in this case). La query precedente restituisce pertanto qualsiasi macchina rossa e qualsiasi macchina blu e quindi ordina il risultato dell'unione in base al prezzo.So, the previous query returns any one red car and any one blue car and then orders the result of that union by the price. Nell'esempio seguente viene illustrato il metodo corretto per scrivere questa query per ottenere il risultato desiderato.The following example shows the correct method of writing this query to achieve the desired result.

SELECT Model, Color, Price  
FROM (SELECT TOP(1) Model, Color, Price  
      FROM dbo.Cars  
      WHERE Color = 'red'  
      ORDER BY Price ASC) AS a  
UNION ALL  
SELECT Model, Color, Price  
FROM (SELECT TOP(1) Model, Color, Price  
      FROM dbo.Cars  
      WHERE Color = 'blue'  
      ORDER BY Price ASC) AS b;  
GO    

L'uso di TOP e ORDER BY in un'operazione sub-SELECT assicura che i risultati della clausola ORDER BY vengano applicati alla clausola TOP e non all'ordinamento del risultato dell'operazione UNION.By using TOP and ORDER BY in a subselect operation, you ensure that the results of the ORDER BY clause are applied to the TOP clause and not to sorting the result of the UNION operation.

Set di risultati:Here is the result set.

Model         Color      Price  
------------- ---------- -------  
sedan         red        10000.00  
van           blue        8000.00

Limitazioni e restrizioniLimitations and Restrictions

Quando si usa TOP con INSERT, UPDATE, MERGE o DELETE, le righe a cui viene fatto riferimento non vengono disposte in alcun ordineWhen you use TOP with INSERT, UPDATE, MERGE, or DELETE, the referenced rows aren't arranged in any order. e non è possibile specificare direttamente la clausola ORDER BY in queste istruzioni.And, you can't directly specify the ORDER BY clause in these statements. Se è necessario usare TOP per inserire, eliminare o modificare righe in un ordine cronologico significativo, usare TOP specificando una clausola ORDER BY in un'istruzione sub-SELECT.If you need to use TOP to insert, delete, or modify rows in a meaningful chronological order, use TOP with an ORDER BY clause specified in a subselect statement. Vedere la successiva sezione Esempi di questo articolo.See the following Examples section in this article.

Non è possibile usare TOP in istruzioni UPDATE e DELETE su viste partizionate.You can't use TOP in an UPDATE and DELETE statements on partitioned views.

Non è possibile combinare TOP con OFFSET e FETCH nella stessa espressione di query (nello stesso ambito query).You can't combine TOP with OFFSET and FETCH in the same query expression (in the same query scope). Per altre informazioni, vedere Clausola ORDER BY (Transact-SQL).For more information, see ORDER BY Clause (Transact-SQL).

EsempiExamples

CategoryCategory Elementi di sintassi inclusiFeatured syntax elements
Sintassi di baseBasic syntax TOP • PERCENTTOP • PERCENT
Inclusione di valori equivalentiIncluding tie values WITH TIESWITH TIES
Limitazione delle righe interessate da DELETE, INSERT o UPDATELimiting the rows affected by DELETE, INSERT, or UPDATE DELETE • INSERT • UPDATEDELETE • INSERT • UPDATE

Sintassi di baseBasic syntax

Negli esempi contenuti in questa sezione vengono illustrate le funzionalità di base della clausola ORDER BY utilizzando la sintassi minima necessaria.Examples in this section demonstrate the basic functionality of the ORDER BY clause using the minimum required syntax.

A.A. Utilizzo di TOP con un valore costanteUsing TOP with a constant value

Negli esempi seguenti viene utilizzato un valore costante per specificare il numero di dipendenti restituiti nel set di risultati della query.The following examples use a constant value to specify the number of employees that are returned in the query result set. Nel primo esempio vengono restituite le prime 10 righe non definite perché non viene usata una clausola ORDER BY.In the first example, the first 10 undefined rows are returned because an ORDER BY clause isn't used. Nel secondo esempio viene utilizzata una clausola ORDER BY per restituire i primi 10 dipendenti assunti di recente.In the second example, an ORDER BY clause is used to return the top 10 recently hired employees.

USE AdventureWorks2012;  
GO  
-- Select the first 10 random employees.  
SELECT TOP(10)JobTitle, HireDate  
FROM HumanResources.Employee;  
GO  
-- Select the first 10 employees hired most recently.  
SELECT TOP(10)JobTitle, HireDate  
FROM HumanResources.Employee  
ORDER BY HireDate DESC;  
GO  

b.B. Utilizzo di TOP con una variabileUsing TOP with a variable

Nell'esempio seguente viene utilizzata una variabile per specificare il numero di dipendenti restituiti nel set di risultati della query.The following example uses a variable to specify the number of employees that are returned in the query result set.

USE AdventureWorks2012;  
GO  
DECLARE @p AS int = 10;  
SELECT TOP(@p)JobTitle, HireDate, VacationHours  
FROM HumanResources.Employee  
ORDER BY VacationHours DESC;  
GO  

C.C. Specifica di una percentualeSpecifying a percentage

Nell'esempio seguente viene utilizzato PERCENT per specificare il numero di dipendenti restituiti nel set di risultati della query.The following example uses PERCENT to specify the number of employees that are returned in the query result set. Nella tabella HumanResources.Employee sono presenti 290 dipendenti.There are 290 employees in the HumanResources.Employee table. Dato che il 5% di 290 è un valore frazionario, il valore viene arrotondato al numero intero successivo.Because five percent of 290 is a fractional value, the value is rounded up to the next whole number.

USE AdventureWorks2012;  
GO  
SELECT TOP(5)PERCENT JobTitle, HireDate  
FROM HumanResources.Employee  
ORDER BY HireDate DESC;  
GO    

Inclusione di valori equivalentiIncluding tie values

A.A. Utilizzo di WITH TIES per includere righe corrispondenti ai valori nell'ultima rigaUsing WITH TIES to include rows that match the values in the last row

L'esempio seguente recupera il primo 10% di tutti i dipendenti con lo stipendio più alto e restituisce i dipendenti in ordine decrescente in base allo stipendio.The following example gets the top 10 percent of all employees with the highest salary and returns them in descending order according to their salary. Specificando WITH TIES, nel set di risultati vengono inclusi anche i dipendenti con stipendio pari allo stipendio più basso restituito (ultima riga), anche se in questo modo il set di risultati supera il 10% dei dipendenti.Specifying WITH TIES ensures that employees with salaries equal to the lowest salary returned (the last row) are also included in the result set, even if it exceeds 10 percent of employees.

USE AdventureWorks2012;  
GO  
SELECT TOP(10) PERCENT WITH TIES  
pp.FirstName, pp.LastName, e.JobTitle, e.Gender, r.Rate  
FROM Person.Person AS pp   
    INNER JOIN HumanResources.Employee AS e  
        ON pp.BusinessEntityID = e.BusinessEntityID  
    INNER JOIN HumanResources.EmployeePayHistory AS r  
        ON r.BusinessEntityID = e.BusinessEntityID  
ORDER BY Rate DESC;  
GO    

Limitazione delle righe interessate da DELETE, INSERT o UPDATELimiting the rows affected by DELETE, INSERT, or UPDATE

A.A. Utilizzo di TOP per limitare il numero di righe eliminateUsing TOP to limit the number of rows deleted

Quando si usa una clausola TOP (n) con DELETE, l'operazione di eliminazione viene eseguita su una selezione non definita di n righe.When you use a TOP (n) clause with DELETE, the delete operation is done on an undefined selection of n number of rows. In altre parole, l'istruzione DELETE sceglie un numero (n) di righe che soddisfano i criteri definiti nella clausola WHERE.That is, the DELETE statement chooses any (n) number of rows that meet the criteria defined in the WHERE clause. L'esempio seguente elimina 20 righe con scadenze precedenti al 1° luglio 2002 dalla tabella PurchaseOrderDetail.The following example deletes 20 rows from the PurchaseOrderDetail table that have due dates earlier than July 1, 2002.

USE AdventureWorks2012;  
GO  
DELETE TOP (20)   
FROM Purchasing.PurchaseOrderDetail  
WHERE DueDate < '20020701';  
GO  

Se si vuole usare TOP per eliminare le righe in un ordine cronologico significativo, usare TOP con ORDER BY in un'istruzione sub-SELECT.If you want to use TOP to delete rows in a meaningful chronological order, use TOP with ORDER BY in a subselect statement. Tramite la query seguente vengono eliminate le 10 righe della tabella PurchaseOrderDetail contenenti le date di scadenza più imminenti.The following query deletes the 10 rows of the PurchaseOrderDetail table that have the earliest due dates. Per assicurarsi che vengano eliminate solo 10 righe, la colonna specificata nell'istruzione di selezione secondaria (PurchaseOrderID) è la chiave primaria della tabella.To ensure that only 10 rows are deleted, the column specified in the subselect statement (PurchaseOrderID) is the primary key of the table. L'utilizzo di una colonna non chiave nell'istruzione sub-SELECT può avere come conseguenza l'eliminazione di più di 10 righe se la colonna specificata contiene valori duplicati.Using a nonkey column in the subselect statement may result in the deletion of more than 10 rows if the specified column contains duplicate values.

USE AdventureWorks2012;  
GO  
DELETE FROM Purchasing.PurchaseOrderDetail  
WHERE PurchaseOrderDetailID IN  
   (SELECT TOP 10 PurchaseOrderDetailID   
    FROM Purchasing.PurchaseOrderDetail   
    ORDER BY DueDate ASC);  
GO  

b.B. Utilizzo di TOP per limitare il numero di righe inseriteUsing TOP to limit the number of rows inserted

L'esempio seguente crea la tabella EmployeeSales e inserisce il nome e i dati sulle vendite da inizio anno per i primi cinque dipendenti della tabella HumanResources.Employee.The following example creates the table EmployeeSales and inserts the name and year-to-date sales data for the top five employees from the table HumanResources.Employee. L'istruzione INSERT sceglie cinque righe qualsiasi restituite dall'istruzione SELECT che soddisfano i criteri definiti nella clausola WHERE.The INSERT statement chooses any five rows returned by the SELECT statement that meet the criteria defined in the WHERE clause. La clausola OUTPUT consente di visualizzare le righe inserite nella tabella EmployeeSales.The OUTPUT clause displays the rows that are inserted into the EmployeeSales table. Si noti che la clausola ORDER BY nell'istruzione SELECT non viene usate per determinare i primi cinque dipendenti.Notice that the ORDER BY clause in the SELECT statement isn't used to determine the top five employees.

USE AdventureWorks2012 ;  
GO  
IF OBJECT_ID ('dbo.EmployeeSales', 'U') IS NOT NULL  
    DROP TABLE dbo.EmployeeSales;  
GO  
CREATE TABLE dbo.EmployeeSales  
( EmployeeID   nvarchar(11) NOT NULL,  
  LastName     nvarchar(20) NOT NULL,  
  FirstName    nvarchar(20) NOT NULL,  
  YearlySales  money NOT NULL  
 );  
GO  
INSERT TOP(5)INTO dbo.EmployeeSales  
    OUTPUT inserted.EmployeeID, inserted.FirstName, inserted.LastName, inserted.YearlySales  
    SELECT sp.BusinessEntityID, c.LastName, c.FirstName, sp.SalesYTD   
    FROM Sales.SalesPerson AS sp  
    INNER JOIN Person.Person AS c  
        ON sp.BusinessEntityID = c.BusinessEntityID  
    WHERE sp.SalesYTD > 250000.00  
    ORDER BY sp.SalesYTD DESC;  
GO    

Se si vuole usare TOP per inserire le righe in un ordine cronologico significativo, usare TOP con ORDER BY in un'istruzione sub-SELECT.If you want to use TOP to insert rows in a meaningful chronological order, use TOP with ORDER BY in a subselect statement. L'esempio seguente illustra come effettuare questa operazione.The following example show how to do this. La clausola OUTPUT consente di visualizzare le righe inserite nella tabella EmployeeSales.The OUTPUT clause displays the rows that are inserted into the EmployeeSales table. Si noti che vengono ora inseriti i primi cinque dipendenti in base ai risultati della clausola ORDER BY, anziché righe non definite.Notice that the top five employees are now inserted based on the results of the ORDER BY clause instead of undefined rows.

INSERT INTO dbo.EmployeeSales  
    OUTPUT inserted.EmployeeID, inserted.FirstName, inserted.LastName, inserted.YearlySales  
    SELECT TOP (5) sp.BusinessEntityID, c.LastName, c.FirstName, sp.SalesYTD   
    FROM Sales.SalesPerson AS sp  
    INNER JOIN Person.Person AS c  
        ON sp.BusinessEntityID = c.BusinessEntityID  
    WHERE sp.SalesYTD > 250000.00  
    ORDER BY sp.SalesYTD DESC;  
GO    

C.C. Utilizzo di TOP per limitare il numero di righe aggiornateUsing TOP to limit the number of rows updated

Nell'esempio seguente viene utilizzata la clausola TOP per aggiornare righe in una tabella.The following example uses the TOP clause to update rows in a table. Quando si usa una clausola TOP (n) con UPDATE, l'operazione di aggiornamento viene eseguita su un numero non definito di righe.When you use a TOP (n) clause with UPDATE, the update operation runs on an undefined number of rows. In altre parole, l'istruzione UPDATE sceglie un numero (n) di righe che soddisfano i criteri definiti nella clausola WHERE.That is, the UPDATE statement chooses any (n) number of rows that meet the criteria defined in the WHERE clause. Nell'esempio seguente vengono assegnati 10 clienti da un venditore a un altro.The following example assigns 10 customers from one salesperson to another.

USE AdventureWorks2012;  
UPDATE TOP (10) Sales.Store  
SET SalesPersonID = 276  
WHERE SalesPersonID = 275;  
GO  

Se è necessario utilizzare TOP per applicare gli aggiornamenti in un ordine cronologico significativo, è necessario utilizzare questa clausola insieme a ORDER BY in un'istruzione sub-SELECT.If you have to use TOP to apply updates in a meaningful chronology, you must use TOP together with ORDER BY in a subselect statement. Nell'esempio seguente le ore di ferie dei 10 dipendenti vengono aggiornate con le prime date di assunzione.The following example updates the vacation hours of the 10 employees with the earliest hire dates.

UPDATE HumanResources.Employee  
SET VacationHours = VacationHours + 8  
FROM (SELECT TOP 10 BusinessEntityID FROM HumanResources.Employee  
     ORDER BY HireDate ASC) AS th  
WHERE HumanResources.Employee.BusinessEntityID = th.BusinessEntityID;  
GO  

Esempi: Azure SQL Data WarehouseAzure SQL Data Warehouse e Parallel Data WarehouseParallel Data WarehouseExamples: Azure SQL Data WarehouseAzure SQL Data Warehouse and Parallel Data WarehouseParallel Data Warehouse

L'esempio seguente restituisce le prime 31 righe corrispondenti ai criteri di query.The following example returns the top 31 rows that match the query criteria. La clausola ORDER BY garantisce che le 31 righe restituite siano le prime 31 righe in base all'ordinamento alfabetico della colonna LastName.The ORDER BY clause ensures that the 31 returned rows are the first 31 rows based on an alphabetical ordering of the LastName column.

Uso di TOP senza specificare i valori equivalenti.Using TOP without specifying ties.

SELECT TOP (31) FirstName, LastName   
FROM DimEmployee ORDER BY LastName;  

Risultato: vengono restituite 31 righe.Result: 31 rows are returned.

Uso di TOP specificando WITH TIES.Using TOP, specifying WITH TIES.

SELECT TOP (31) WITH TIES FirstName, LastName   
FROM DimEmployee ORDER BY LastName;  

Risultato: vengono restituite 33 righe perché tre dipendenti di nome Brown hanno un valore equivalente per la 31esima riga.Result: 33 rows are returned, because three employees named Brown tie for the 31st row.

Vedere ancheSee Also

SELECT (Transact-SQL) SELECT (Transact-SQL)
INSERT (Transact-SQL) INSERT (Transact-SQL)
UPDATE (Transact-SQL) UPDATE (Transact-SQL)
DELETE (Transact-SQL) DELETE (Transact-SQL)
Clausola ORDER BY (Transact-SQL) ORDER BY Clause (Transact-SQL)
SET ROWCOUNT (Transact-SQL) SET ROWCOUNT (Transact-SQL)
MERGE (Transact-SQL)MERGE (Transact-SQL)