Partager via


Limitation des jeux de résultats à l'aide de TOP et de PERCENT

Vous pouvez utiliser la clause TOP pour limiter le nombre de lignes qui sont retournées dans l'ensemble de résultats.

TOP ( expression ) [ PERCENT ] [ WITH TIES ]

expression est une expression numérique qui spécifie le nombre de lignes à retourner ; toutefois, si vous utilisez PERCENT, c'est le pourcentage (indiqué par expression) de lignes de l'ensemble de résultats qui est retourné. Exemple :

TOP (120) /*Return the top 120 rows of the result set. */
TOP (15) PERCENT /* Return the top 15 percent of the result set. */.
TOP(@n) /* Return the top @n rows of the result set, with the variable declaration: DECLARE @n AS BIGINT; SET @n = 2 */.

Si une instruction SELECT incluant la clause TOP comporte également une clause ORDER BY, les lignes à retourner sont sélectionnées après le classement de l'ensemble de résultats. La totalité de l'ensemble de résultats est générée dans l'ordre spécifié et les n premières lignes du jeu classé sont retournées. Si WITH TIES est également spécifié, toutes les lignes qui contiennent la dernière valeur retournée par la clause ORDER BY sont retournées, même si cette opération dépasse le nombre spécifié par expression.

TOP et SET ROWCOUNT

Vous pouvez également limiter la taille d'un ensemble de résultats en exécutant l'instruction SET ROWCOUNT n avant l'exécution d'une instruction. SET ROWCOUNT diffère de TOP sur les points suivants :

  • La limite SET ROWCOUNT s'applique lors de la construction des lignes de l'ensemble de résultats après qu'une clause ORDER BY soit prise en compte. Lorsque ORDER BY est spécifié, l’instruction SELECT est terminée lorsque n lignes ont été sélectionnées à partir d’un jeu de valeurs trié conformément au classement ORDER BY spécifié.
  • La clause TOP s'applique à la seule instruction SELECT où elle est définie. SET ROWCOUNT reste effectif jusqu'à l'exécution d'une autre instruction SET ROWCOUNT, comme par exemple SET ROWCOUNT 0 pour désactiver l'option.
    ms187043.note(fr-fr,SQL.90).gifImportant :
    L'utilisation de SET ROWCOUNT n'affectera pas les instructions DELETE, INSERT et UPDATE dans la prochaine version de SQL Server. Évitez d'utiliser SET ROWCOUNT avec les instructions DELETE, INSERT et UPDATE dans les nouvelles tâches de développement et pensez à modifier les applications qui l'utilisent actuellement. Il est recommandé de réécrire les instructions DELETE, INSERT et UPDATE qui utilisent actuellement SET ROWCOUNT afin qu'elles recourent à TOP.
    Bien que l'effet de SET ROWCOUNT sur les instructions SELECT demeure inchangé, l'utilisation de TOP avec SELECT est préférable à celle de SET ROWCOUNT pour les raisons suivantes : - SET ROWCOUNT provoque l'arrêt du traitement de la plupart des instructions SELECT, INSERT, UPDATE et DELETE lorsqu'elles ont affecté le nombre de lignes spécifié. Ce comportement concerne également l'activation des déclencheurs. - Dans le cadre d'une instruction SELECT, l'optimiseur de requête peut utiliser la valeur de *expression* dans la clause TOP en vue de générer un plan d'exécution pour une requête. Étant donné que SET ROWCOUNT est utilisé en dehors d'une instruction qui exécute une requête, sa valeur ne permet pas de générer le plan d'une requête.

Voir aussi

Autres ressources

TOP (Transact-SQL)
SELECT (Transact-SQL)
SET ROWCOUNT (Transact-SQL)

Aide et Informations

Assistance sur SQL Server 2005