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...