Maison >base de données >tutoriel mysql >Quand et pourquoi utiliser « SELECT TOP 100 PERCENT » dans SQL Server ?

Quand et pourquoi utiliser « SELECT TOP 100 PERCENT » dans SQL Server ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-02 22:30:39614parcourir

When and Why Use `SELECT TOP 100 PERCENT` in SQL Server?

Utilisation de TOP 100 PERCENT dans SQL Server

Avant SQL Server 2005, la clause SELECT TOP 100 PERCENT pouvait être utilisée comme une astuce pour forcer l'utilisation d'une clause ORDER BY dans les définitions de vue. Cependant, son utilisation s'étend au-delà des définitions de vues dans les instructions SQL dynamiques dans diverses applications.

Matérialisation intermédiaire

L'objectif principal de SELECT TOP 100 PERCENT en SQL dynamique est de " matérialisation intermédiaire. » Cette technique implique la création d'une table intermédiaire ou d'un résultat de requête en tant que magasin temporaire avant l'exécution finale de la requête. En utilisant TOP 100 PERCENT, le magasin temporaire est matérialisé avec toutes les lignes de la requête d'origine, garantissant ainsi que l'ordre des lignes est préservé.

Exemple pratique

Considérez le requête suivante :

SELECT foo
FROM MyTable
WHERE ISNUMERIC (foo) = 1 AND CAST(foo AS int) > 100

Cette requête peut échouer en raison de l'ordre d'évaluation indéterminé entre les clauses WHERE et ORDER BY. Cependant, en utilisant TOP 100 PERCENT, la requête suivante fonctionnera :

SELECT foo
FROM
    (SELECT TOP 100 PERCENT foo From MyTable WHERE ISNUMERIC (foo) = 1 ORDER BY foo) bar
WHERE
    CAST(foo AS int) > 100

Dans SQL Server 2000 et versions antérieures, cette technique forçait la matérialisation de la requête interne, garantissant ainsi que l'ordre des lignes était préservé. Ce même comportement est toujours présent dans SQL Server 2005.

Cependant, il est important de noter qu'une utilisation excessive de TOP 100 PERCENT peut avoir des implications sur les performances et ne doit être utilisée qu'en cas d'absolue nécessité. Il est préférable de s'appuyer sur un partitionnement de table explicite ou des procédures stockées pour l'ordre des lignes lorsque cela est possible.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn