Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Pourquoi utiliser Select Top 100 % ?

Il a été utilisé pour la "matérialisation intermédiaire (recherche Google)"

Bon article :Adam Machanic :Explorer les secrets de la matérialisation intermédiaire

Il a même créé un MS Connect pour que cela puisse être fait de manière plus propre

Mon point de vue n'est "pas intrinsèquement mauvais", mais ne l'utilisez pas à moins d'être sûr à 100%. Le problème est que cela ne fonctionne qu'au moment où vous le faites et probablement pas plus tard (niveau de patch, schéma, index, nombre de lignes, etc.)...

Exemple concret

Cela peut échouer car vous ne savez pas dans quel ordre les éléments sont évalués

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

Et cela peut aussi échouer parce que

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

Cependant, ce n'était pas le cas dans SQL Server 2000. La requête interne est évaluée et mise en file d'attente :

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

Remarque, cela fonctionne toujours dans SQL Server 2005

SELECT TOP 2000000000 ... ORDER BY...