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

S’applique à :Applies to: ouiSQL ServerSQL Server (toutes les versions prises en charge) yesSQL ServerSQL Server (all supported versions) OuiAzure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL Database OuiAzure SQL Managed InstanceAzure SQL Managed InstanceYesAzure SQL Managed InstanceAzure SQL Managed Instance ouiAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics ouiParallel Data WarehouseParallel Data WarehouseyesParallel Data WarehouseParallel Data WarehouseS’applique à :Applies to: ouiSQL ServerSQL Server (toutes les versions prises en charge) yesSQL ServerSQL Server (all supported versions) OuiAzure SQL DatabaseAzure SQL DatabaseYesAzure SQL DatabaseAzure SQL Database OuiAzure SQL Managed InstanceAzure SQL Managed InstanceYesAzure SQL Managed InstanceAzure SQL Managed Instance ouiAzure Synapse AnalyticsAzure Synapse AnalyticsyesAzure Synapse AnalyticsAzure Synapse Analytics ouiParallel Data WarehouseParallel Data WarehouseyesParallel Data WarehouseParallel Data Warehouse

Limite les lignes retournées dans un jeu de résultats de la requête à un nombre spécifié de lignes ou à un pourcentage de lignes dans SQL Server 2019 (15.x)SQL Server 2019 (15.x).Limits the rows returned in a query result set to a specified number of rows or percentage of rows in SQL Server 2019 (15.x)SQL Server 2019 (15.x). Lorsque vous utilisez TOP avec la clause ORDER BY, les résultats sont limités aux N premières lignes ordonnées.When you use TOP with the ORDER BY clause, the result set is limited to the first N number of ordered rows. Sinon, TOP retourne les N premières lignes dans un ordre non défini.Otherwise, TOP returns the first N number of rows in an undefined order. Utilisez cette clause pour spécifier le nombre de lignes retournées par une instruction SELECT.Use this clause to specify the number of rows returned from a SELECT statement. Vous pouvez également utiliser TOP pour spécifier les lignes affectées par une instruction INSERT, UPDATE, MERGE ou DELETE.Or, use TOP to specify the rows affected by an INSERT, UPDATE, MERGE, or DELETE statement.

Icône du lien de rubrique Conventions de la syntaxe Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SyntaxeSyntax

La syntaxe pour SQL Server et Azure SQL Database est la suivante :Following is the syntax for SQL Server and Azure SQL Database:

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

Voici la syntaxe pour Azure Synapse Analytics (SQL Data Warehouse)Azure Synapse Analytics (SQL Data Warehouse) et Parallel Data WarehouseParallel Data Warehouse :Following is syntax for Azure Synapse Analytics (SQL Data Warehouse)Azure Synapse Analytics (SQL Data Warehouse) and Parallel Data WarehouseParallel Data Warehouse:

[   
    TOP ( expression )   
    [ WITH TIES ]  
]  

Notes

Pour afficher la syntaxe Transact-SQL pour SQL Server 2014 et versions antérieures, consultez Versions antérieures de la documentation.To view Transact-SQL syntax for SQL Server 2014 and earlier, see Previous versions documentation.

ArgumentsArguments

expressionexpression
Expression numérique qui définit le nombre de lignes à renvoyer.The numeric expression that specifies the number of rows to be returned. expression est implicitement converti en une valeur de type float si vous spécifiez PERCENT.expression is implicitly converted to a float value if you specify PERCENT. Sinon, expression est converti en une valeur de type bigint.Otherwise, expression is converted to bigint.

PERCENTPERCENT
Indique que la requête retourne seulement les premiers expression % des lignes du jeu de résultats.Indicates that the query returns only the first expression percent of rows from the result set. Les valeurs fractionnaires sont arrondies à la valeur entière suivante.Fractional values are rounded up to the next integer value.

WITH TIESWITH TIES
Retourne au moins deux lignes liées au dernier emplacement dans le jeu de résultats limité.Returns two or more rows that tie for last place in the limited results set. Vous devez utiliser cet argument avec la clause ORDER BY.You must use this argument with the ORDER BY clause. WITH TIES peut retourner davantage de lignes que la valeur spécifiée dans expression.WITH TIES might cause more rows to be returned than the value specified in expression. Par exemple, si expression est défini sur 5, mais que 2 lignes supplémentaires correspondent aux valeurs des colonnes ORDER BY sur la ligne 5, le jeu de résultats contient 7 lignes.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.

Vous ne pouvez spécifier la clause TOP avec l’argument WITH TIES que dans les instructions SELECT, et uniquement si vous avez également spécifié la clause 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'ordre retourné pour la liaison des enregistrements est arbitraire.The returned order of tying records is arbitrary. ORDER BY n’affecte pas cette règle.ORDER BY doesn't affect this rule.

Bonnes pratiquesBest Practices

Dans une instruction SELECT, utilisez toujours une clause ORDER BY avec la clause TOP.In a SELECT statement, always use an ORDER BY clause with the TOP clause. C’est la seule méthode permettant d’indiquer de manière prévisible les lignes affectées par TOP.Because, it's the only way to predictably indicate which rows are affected by TOP.

Utilisez OFFSET et FETCH dans la clause ORDER BY au lieu de la clause TOP pour implémenter une solution de pagination de requête.Use OFFSET and FETCH in the ORDER BY clause instead of the TOP clause to implement a query paging solution. Une solution de pagination (autrement dit, l'envoi de segments ou de « pages » de données au client) est plus facile à implémenter à l'aide des clauses OFFSET et FETCH.A paging solution (that is, sending chunks or "pages" of data to the client) is easier to implement using OFFSET and FETCH clauses. Pour plus d’informations, consultez Clause ORDER BY (Transact-SQL).For more information, see ORDER BY Clause (Transact-SQL).

Utilisez TOP (ou OFFSET et FETCH) au lieu de SET ROWCOUNT pour limiter le nombre de lignes retournées.Use TOP (or OFFSET and FETCH) instead of SET ROWCOUNT to limit the number of rows returned. Ces méthodes sont préférables à l'utilisation de SET ROWCOUNT pour les raisons suivantes :These methods are preferred over using SET ROWCOUNT for the following reasons:

  • Dans le cadre d'une instruction SELECT, l'optimiseur de requête peut considérer la valeur d’expression dans les clauses TOP ou FETCH pendant l'optimisation des requêtes.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. Comme vous utilisez SET ROWCOUNT hors d’une instruction qui exécute une requête, sa valeur ne peut pas être prise en compte dans un plan de requête.Because you use SET ROWCOUNT outside of a statement that runs a query, its value can't be considered in a query plan.

Prise en charge de la compatibilitéCompatibility Support

Pour des raisons de compatibilité descendante, les parenthèses sont facultatives dans les instructions SELECT.For backward compatibility, the parentheses are optional in SELECT statements. Nous vous recommandons de toujours placer TOP entre parenthèses dans les instructions SELECT.We recommend that you always use parentheses for TOP in SELECT statements. Cela garantit sa cohérence de son utilisation requise dans les instructions INSERT, UPDATE, MERGE et DELETE.Doing so provides consistency with its required use in INSERT, UPDATE, MERGE, and DELETE statements.

InteropérabilitéInteroperability

L’expression TOP n’affecte pas les instructions qu’un déclencheur pourrait exécuter.The TOP expression doesn't affect statements that might run because of a trigger. Les tables inserted et deleted dans les déclencheurs retournent seulement les lignes réellement affectées par les instructions INSERT, UPDATE, MERGE ou 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. Par exemple, si une instruction INSERT TRIGGER se déclenche suite à une instruction INSERT qui a utilisé une clause TOP.For example, if an INSERT TRIGGER fires as the result of an INSERT statement that used a TOP clause.

SQL ServerSQL Server tient compte de la mise à jour de lignes via des vues.allows for updating rows through views. Comme vous pouvez inclure la clause TOP dans la définition de la vue, certaines lignes peuvent disparaître de la vue si elles ne répondent plus aux conditions de l’expression TOP suite à une mise à jour.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.

Lorsqu’elle est spécifiée dans l’instruction MERGE, la clause TOP s’applique après la jointure des tables source et cible entières.When specified in the MERGE statement, the TOP clause applies after the entire source table and the entire target table are joined. Les lignes jointes non éligibles à une action INSERT, UPDATE ou DELETE sont supprimées.And, the joined rows that don't qualify for an insert, update, or delete action are removed. La clause TOP réduit le nombre de lignes jointes à la valeur spécifiée, et les actions INSERT, UPDATE ou DELETE s’appliquent aux lignes jointes restantes sans respecter un ordre particulier.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. Les lignes ne sont donc pas réparties selon un ordre particulier dans le cadre des actions définies dans les clauses WHEN.That is, there's no order in which the rows are distributed among the actions defined in the WHEN clauses. Par exemple, si la clause TOP (10) affecte 10 lignes, 7 de ces 10 lignes peuvent être mises à jour et 3 insérées.For example, if specifying TOP (10) affects 10 rows, of these rows, seven may be updated and three inserted. Ou 1 peut être supprimée, 5 mises à jour et 4 insérées, etc.Or, one may be deleted, five updated, and four inserted, and so on. Comme l’instruction MERGE analyse complètement les tables source et cible, les performances d’E/S peuvent être affectées lorsque la clause TOP est utilisée pour modifier une table volumineuse en créant plusieurs lots.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. Dans ce scénario, il est important de s’assurer que tous les lots consécutifs ciblent les nouvelles lignes.In this scenario, it's important to ensure that all successive batches target new rows.

Soyez vigilant lorsque vous spécifiez la clause TOP dans une requête contenant un opérateur UNION, UNION ALL, EXCEPT ou INTERSECT.Use caution when you're specifying the TOP clause in a query that contains a UNION, UNION ALL, EXCEPT, or INTERSECT operator. Il est possible d’écrire une requête qui retourne des résultats inattendus car l’ordre dans lequel les clauses TOP et ORDER BY sont traitées logiquement n’est pas toujours intuitif lorsque ces opérateurs sont utilisés dans une opération de sélection.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. Par exemple, d'après le tableau et les données qui suivent, supposez que vous souhaitez renvoyer la voiture rouge la moins chère et la voiture bleue la moins chère.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. Autrement dit, la berline rouge et le fourgon bleu.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');  

Pour obtenir ces résultats, vous pouvez écrire la requête suivante.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    

Le jeu de résultats est le suivant.Following is the result set.

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

Les résultats retournés sont inattendus, car la clause TOP s’exécute logiquement avant la clause ORDER BY, qui trie les résultats de l’opérateur (UNION ALL dans ce cas).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). Par conséquent, la requête précédente retourne toute voiture rouge et toute voiture bleue, puis classe le résultat de cette union en fonction du prix.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. L'exemple suivant affiche la méthode correcte de l'écriture de cette requête pour obtenir le résultat désiré.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    

En utilisant TOP et ORDER BY dans une opération de sous-sélection, vous êtes sûr que les résultats de la clause ORDER BY sont appliqués à la clause TOP et non au tri du résultat de l’opération 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.

Voici le jeu de résultats obtenu.Here is the result set.

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

Limitations et restrictionsLimitations and Restrictions

Lorsque vous utilisez la clause TOP avec INSERT, UPDATE, MERGE ou DELETE, les lignes référencées ne sont pas réorganisées.When you use TOP with INSERT, UPDATE, MERGE, or DELETE, the referenced rows aren't arranged in any order. Et vous ne pouvez pas spécifier directement la clause ORDER BY dans ces instructions.And, you can't directly specify the ORDER BY clause in these statements. Si vous devez utiliser TOP pour insérer, supprimer ou modifier des lignes dans un ordre chronologique explicite, utilisez TOP avec une clause ORDER BY spécifiée dans une instruction de sous-sélection.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. Consultez la section Exemples ci-après dans cet article.See the following Examples section in this article.

Vous ne pouvez pas utiliser TOP dans des instructions UPDATE et DELETE sur des vues partitionnées.You can't use TOP in an UPDATE and DELETE statements on partitioned views.

Vous ne pouvez pas combiner TOP avec OFFSET et FETCH dans la même expression de requête (avec la même étendue de requête).You can't combine TOP with OFFSET and FETCH in the same query expression (in the same query scope). Pour plus d’informations, consultez Clause ORDER BY (Transact-SQL).For more information, see ORDER BY Clause (Transact-SQL).

ExemplesExamples

CategoryCategory Éléments syntaxiques proposésFeatured syntax elements
Syntaxe de baseBasic syntax TOP • PERCENTTOP • PERCENT
Y compris les valeurs de lienIncluding tie values WITH TIESWITH TIES
Limitation des lignes affectées par DELETE, INSERT ou UPDATELimiting the rows affected by DELETE, INSERT, or UPDATE DELETE • INSERT • UPDATEDELETE • INSERT • UPDATE

Syntaxe de baseBasic syntax

Les exemples fournis dans cette section présentent les fonctionnalités de base de la clause ORDER BY en utilisant la syntaxe minimale requise.Examples in this section demonstrate the basic functionality of the ORDER BY clause using the minimum required syntax.

R.A. Utilisation de TOP avec une valeur constanteUsing TOP with a constant value

Les exemples suivants utilisent une valeur constante pour spécifier le nombre d'employés retournés dans le jeu de résultats de la requête.The following examples use a constant value to specify the number of employees that are returned in the query result set. Dans le premier exemple, les 10 premières lignes non définies sont retournées si aucune clause ORDER BY n’est utilisée.In the first example, the first 10 undefined rows are returned because an ORDER BY clause isn't used. Dans le deuxième exemple, une clause ORDER BY est utilisée pour retourner les 10 premiers employés embauchés récemment.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. Utilisation de TOP avec une variableUsing TOP with a variable

L'exemple suivant utilise une variable pour spécifier le nombre d'employés retournés dans le jeu de résultats de la requête.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. Spécification d'un pourcentageSpecifying a percentage

L'exemple suivant utilise PERCENT pour spécifier le nombre d'employés retournés dans le jeu de résultats de la requête.The following example uses PERCENT to specify the number of employees that are returned in the query result set. Il y a 290 employés dans la table HumanResources.Employee.There are 290 employees in the HumanResources.Employee table. Comme 5 pour cent de 290 est une valeur fractionnelle, la valeur est arrondie au nombre entier supérieur.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    

Y compris les valeurs de lienIncluding tie values

R.A. Utilisation de WITH TIES pour inclure des lignes qui correspondent aux valeurs dans la dernière ligneUsing WITH TIES to include rows that match the values in the last row

L’exemple suivant fournit les 10 % des employés ayant le salaire le plus élevé et les retourne dans l’ordre décroissant de leur salaire.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. En spécifiant WITH TIES, vous incluez également dans le jeu de résultats les employés dont le salaire est égal au salaire le plus faible retourné (dernière ligne), même s’il dépasse 10 % des employés.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    

Limitation des lignes affectées par DELETE, INSERT ou UPDATELimiting the rows affected by DELETE, INSERT, or UPDATE

R.A. Utilisation de TOP pour limiter le nombre de lignes suppriméesUsing TOP to limit the number of rows deleted

Quand vous utilisez une clause TOP (n) avec DELETE, l’opération de suppression est appliquée à une sélection non définie de n lignes.When you use a TOP (n) clause with DELETE, the delete operation is done on an undefined selection of n number of rows. Autrement dit, l’instruction DELETE choisit un nombre (n) de lignes qui répondent aux critères définis dans la clause WHERE.That is, the DELETE statement chooses any (n) number of rows that meet the criteria defined in the WHERE clause. L’exemple suivant supprime 20 lignes de la table PurchaseOrderDetail, dont la date d’échéance est antérieure au 1er juillet 2002.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  

Si vous devez utiliser une clause TOP pour supprimer des lignes dans un ordre chronologique spécifique, associez-la à une clause ORDER BY dans une instruction de sous-sélection.If you want to use TOP to delete rows in a meaningful chronological order, use TOP with ORDER BY in a subselect statement. La requête suivante supprime les 10 lignes de la table PurchaseOrderDetail dont la date d'expiration est la plus proche.The following query deletes the 10 rows of the PurchaseOrderDetail table that have the earliest due dates. Pour garantir que seules 10 lignes sont supprimées, la colonne spécifiée dans l'instruction de sous-sélection (PurchaseOrderID) constitue la clé primaire de la table.To ensure that only 10 rows are deleted, the column specified in the subselect statement (PurchaseOrderID) is the primary key of the table. L'utilisation d'une colonne non-clé dans l'instruction de sous-sélection peut entraîner la suppression de plus de 10 lignes si la colonne spécifiée contient des valeurs dupliquées.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. Utilisation de TOP pour limiter le nombre de lignes inséréesUsing TOP to limit the number of rows inserted

L’exemple suivant crée la table EmployeeSales et insère le nom et les ventes de l’année des 5 premiers employés de la table 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’instruction INSERT choisit 5 lignes retournées par l’instruction SELECT, qui répondent aux critères définis dans la clause WHERE.The INSERT statement chooses any five rows returned by the SELECT statement that meet the criteria defined in the WHERE clause. La clause OUTPUT affiche les lignes insérées dans la table EmployeeSales.The OUTPUT clause displays the rows that are inserted into the EmployeeSales table. Notez que la clause ORDER BY dans l’instruction SELECT n’est pas utilisée pour déterminer les 5 premiers employés.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    

Si vous souhaitez utiliser une clause TOP pour insérer des lignes dans un ordre chronologique spécifique, associez-la à une clause ORDER BY dans une instruction de sous-sélection.If you want to use TOP to insert rows in a meaningful chronological order, use TOP with ORDER BY in a subselect statement. L’exemple suivant montre comment effectuer cette opération.The following example show how to do this. La clause OUTPUT affiche les lignes insérées dans la table EmployeeSales.The OUTPUT clause displays the rows that are inserted into the EmployeeSales table. Notez que les 5 premiers employés sont maintenant insérés en fonction des résultats de la clause ORDER BY et non de lignes non définies.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. Utilisation de TOP pour limiter le nombre de lignes mises à jourUsing TOP to limit the number of rows updated

L'exemple suivant utilise la clause TOP pour mettre à jour des lignes dans une table.The following example uses the TOP clause to update rows in a table. Quand vous utilisez une clause TOP (n) avec UPDATE, l’opération de mise à jour est effectuée sur une sélection non définie de lignes.When you use a TOP (n) clause with UPDATE, the update operation runs on an undefined number of rows. Autrement dit, l’instruction UPDATE choisit un nombre (n) de lignes qui répondent aux critères définis dans la clause WHERE.That is, the UPDATE statement chooses any (n) number of rows that meet the criteria defined in the WHERE clause. L'exemple suivant retire 10 clients à un vendeur et les attribue à un autre vendeur.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  

Si vous devez utiliser la clause TOP pour appliquer des mises à jour en respectant une certaine chronologie, vous devez combiner les clauses TOP et ORDER BY dans une instruction de sous-sélection.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. L'exemple ci-dessous met à jour les heures de congé des 10 employés dont la date d'embauche est la plus ancienne.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  

Exemples : Azure Synapse Analytics (SQL Data Warehouse)Azure Synapse Analytics (SQL Data Warehouse) et Parallel Data WarehouseParallel Data WarehouseExamples: Azure Synapse Analytics (SQL Data Warehouse)Azure Synapse Analytics (SQL Data Warehouse) and Parallel Data WarehouseParallel Data Warehouse

L’exemple suivant retourne les 31 premières lignes qui correspondent aux critères de la requête.The following example returns the top 31 rows that match the query criteria. La clause ORDER BY garantit que les 31 lignes retournées sont les 31 premières lignes dans l’ordre alphabétique de la colonne 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.

Utilisation de TOP sans spécifier de liens.Using TOP without specifying ties.

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

Résultat : 31 lignes sont retournées.Result: 31 rows are returned.

Utilisation de TOP en spécifiant WITH TIES.Using TOP, specifying WITH TIES.

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

Résultat : 33 lignes sont retournées, car 3 employés du nom de Brown sont regroupés à la ligne 31.Result: 33 rows are returned, because three employees named Brown tie for the 31st row.

Voir aussiSee 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)
Clause ORDER BY (Transact-SQL) ORDER BY Clause (Transact-SQL)
SET ROWCOUNT (Transact-SQL) SET ROWCOUNT (Transact-SQL)
MERGE (Transact-SQL)MERGE (Transact-SQL)