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.
Conventions 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.Remarque : 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 |
|
5 décembre 2005 |
|