Maison >base de données >tutoriel mysql >Pourquoi utiliser « SELECT TOP 100 PERCENT » dans SQL Server : une syntaxe nécessaire, mauvaise ou inutile ?

Pourquoi utiliser « SELECT TOP 100 PERCENT » dans SQL Server : une syntaxe nécessaire, mauvaise ou inutile ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-01 13:04:11996parcourir

Why Use `SELECT TOP 100 PERCENT` in SQL Server:  A Necessary Evil or Useless Syntax?

Utilisation de SELECT TOP 100 Percent : aperçu des fonctionnalités inutilisées

Traditionnellement, SELECT TOP 100 PERCENT était utilisé dans les définitions de vues pour contourner la restriction contre en utilisant ORDER BY dans de tels contextes. Cependant, dans certaines bases de code, cette fonctionnalité apparaît étrangement au sein des instructions SQL dynamiques. Y a-t-il une justification pour cette inclusion, ou donne-t-elle simplement le même résultat que l'exclusion de TOP 100 PERCENT ?

Étonnamment, SELECT TOP 100 PERCENT a trouvé une application unique dans le domaine de la « matérialisation intermédiaire ». En tirant parti de cette construction, il a été possible de mettre en cache les résultats des requêtes et d'optimiser les exécutions ultérieures. L'article d'Adam Machanic propose une exploration éclairante de cette technique.

Bien que la pratique consistant à utiliser SELECT TOP 100 PERCENT de cette manière ne soit pas problématique en soi, elle exige une extrême prudence et ne doit être utilisée qu'en cas d'absolue nécessité. Sa dépendance à l'égard de circonstances spécifiques et de facteurs environnementaux le rend vulnérable à des changements subtils dans le schéma, la structure de l'index ou le nombre de lignes, ce qui peut conduire à un comportement inattendu et imprévisible.

Pour plus de clarté, considérons les exemples suivants :

Exemple invalidé :

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

Invalidé Exemple :

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

Exemple valide (SQL Server 2000 et 2005) :

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

De plus, SELECT TOP 100 PERCENT étend sa portée à SQL Server 2005, permettant des résultats potentiellement illimités avec :

SELECT TOP 2000000000 ... ORDER BY...

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