Avant SQL Server 2005, les développeurs utilisaient l'astuce « Sélectionner les 100 premiers pour cent » pour activer l'utilisation d'une commande by clause dans une définition de vue. Cependant, au-delà de cet objectif, certains codes hérités aujourd'hui incluent toujours « Select Top 100 Percent » dans les instructions SQL dynamiques utilisées dans ADO dans les applications ASP.NET.
La question : y a-t-il une raison d'utiliser " Top 100 % » dans ces scénarios ?
La réponse : intermédiaire Matérialisation
Selon des experts comme Adam Machanic, « Select Top 100 Percent » a été utilisé pour la « matérialisation intermédiaire ». Voici pourquoi :
Dans SQL Server, les requêtes peuvent être évaluées dans des ordres différents selon les circonstances. Par exemple, les deux requêtes suivantes peuvent produire des résultats différents en raison de l'ambiguïté dans l'ordre d'évaluation :
SELECT foo From MyTable WHERE ISNUMERIC (foo) = 1 AND CAST(foo AS int) > 100 SELECT foo FROM (SELECT foo From MyTable WHERE ISNUMERIC (foo) = 1) bar WHERE CAST(foo AS int) > 100
Cependant, avant SQL Server 2005, le fait de placer la requête interne dans "Sélectionner les 100 premiers pour cent" forçait la requête interne à mettre en file d'attente, ce qui entraîne un ordre d'évaluation cohérent :
SELECT foo FROM (SELECT TOP 100 PERCENT foo From MyTable WHERE ISNUMERIC (foo) = 1 ORDER BY foo) bar WHERE CAST(foo AS int) > 100
Attention Remarque
Bien que cette technique ait été acceptable dans le passé, il est généralement conseillé d'éviter d'utiliser « Sélectionner les 100 premiers pour cent » en SQL dynamique. Les résultats peuvent ne pas être cohérents en raison de changements dans les niveaux de correctifs, le schéma, les index ou le nombre de lignes.
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!