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 le jeu 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 du jeu de résultats qui est retourné. Par 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 à partir du jeu de résultats classé. La totalité du jeu de résultats est générée dans l'ordre spécifié et les n premières lignes du jeu de résultats 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 jeu de résultats en exécutant l'instruction SET ROWCOUNT n avant d'exécuter une instruction. SET ROWCOUNT diffère de TOP sur les points suivants :

  • La clause TOP s'applique à la seule instruction SELECT où elle est spécifiée. SET ROWCOUNT reste effectif jusqu'à l'exécution d'une autre instruction SET ROWCOUNT, par exemple SET ROWCOUNT 0 pour désactiver l'option.

    Important

    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 un plan de requête.