TOP (Transact-SQL)

Mis à jour : 17 novembre 2008

Spécifie que seul le premier ensemble de lignes sera retourné par la requête. L'ensemble de lignes peut être un nombre de lignes ou un pourcentage des lignes. L'expression TOP peut être utilisée dans les instructions SELECT, INSERT, UPDATE et DELETE.

Icône Lien de rubriqueConventions de syntaxe Transact-SQL

Syntaxe

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

Arguments

  • expression
    Expression numérique qui définit le nombre de lignes retournées. expression est converti implicitement en une valeur float si PERCENT est défini. Si tel n'est pas le cas, l'expression est convertie en bigint.

    Les parenthèses qui délimitent expression dans TOP sont obligatoires dans les instructions INSERT, UPDATE et DELETE. Pour la compatibilité descendante, TOP expression sans parenthèses dans les instructions SELECT est pris en charge, mais cette utilisation n'est pas recommandée.

    Si la requête contient une clause ORDER BY, les expression premières lignes ou expression pour cent des lignes triées par la clause ORDER BY sont retournées. Lorsque la requête ne comprend pas de clause ORDER BY, l'ordre des lignes est arbitraire.

  • PERCENT
    Indique que la requête retourne seulement les premiers expression pour cent des lignes du jeu de résultats.
  • WITH TIES
    Spécifie que des lignes supplémentaires doivent être retournées du jeu de résultats de base avec la même valeur dans les colonnes ORDER BY apparaissant comme les dernières des TOP n (PERCENT) lignes. TOP...WITH TIES peut être défini uniquement dans les instructions SELECT, et seulement si une clause ORDER BY est spécifiée.

    ms189463.note(fr-fr,SQL.90).gifRemarque :
    L'ordre dans lequel les enregistrements liés sont retournés est arbitraire. SORT BY n'affecte pas cette règle.

Notes

TOP ne peut pas être utilisé en même temps que des instructions UPDATE et DELETE sur des vues partitionnées.

Les lignes référencées dans l'expression TOP utilisée avec INSERT, UPDATE ou DELETE ne sont pas triées. TOP n retourne un nombre n aléatoire de lignes. Par exemple, l'instruction INSERT suivante contient la clause ORDER BY, mais cette clause n'affecte pas les lignes auxquelles l'instruction INSERT fait directement référence.

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

La clause ORDER BY de la requête précédente fait référence uniquement aux lignes qui sont retournées par l'instruction SELECT imbriquée. L'instruction INSERT choisit deux des lignes retournées par l'instruction SELECT. Pour que les deux premières lignes de la sous-requête SELECT soient insérées, réécrivez la requête comme suit.

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

Microsoft SQL Server 2005 permet de mettre à jour des vues qui ont été créées avec la clause TOP. La clause TOP étant incluse dans la définition de la vue, des lignes peuvent disparaître de la vue à la suite d'une mise à jour si le résultat ne répond plus aux conditions de l'expression TOP. Pour plus d'informations, consultez Modification de données par l'intermédiaire d'une vue.

L'expression TOP dans une requête n'affecte pas les instructions qui peuvent être exécutées à la suite de l'activation d'un déclencheur. Les tables insérées et mises à jour dans les déclencheurs montrent seulement les lignes réellement affectées par les instructions INSERT, UPDATE ou DELETE.

Exemples

A. Utilisation de TOP avec des variables

L'exemple suivant utilise une variable pour obtenir les 10 premiers employés figurant dans la table dbo.Employee de la base de données AdventureWorks.

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

B. Utilisation de TOP avec PERCENT et WITH TIES

L'exemple suivant obtient les 10 % des employés ayant le salaire le plus élevé et les retourne dans l'ordre décroissant en fonction du taux de salaire de base. En définissant WITH TIES, vous incluez également dans le jeu de résultats les employés dont le salaire est égal au salaire retourné le plus faible, même si cette opération entraîne un dépassement du seuil fixé de 10 % des employés.

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;

Voir aussi

Référence

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

Aide et Informations

Assistance sur SQL Server 2005

Historique des modifications

Version Historique

17 novembre 2008

Contenu modifié :
  • Ajout de la note sur la description de l'argument WITH TIES.

5 décembre 2005

Contenu modifié :
  • L'exemple B a été mis à jour.