sql >> Base de Datos >  >> RDS >> Sqlserver

¿Por qué utilizar Seleccionar el 100 por ciento superior?

Se utilizó para "materialización intermedia (búsqueda en Google)"

Buen artículo:Adam Machanic:Explorando los secretos de la materialización intermedia

Incluso planteó un MS Connect para que se pueda hacer de una manera más limpia

Mi punto de vista "no es intrínsecamente malo", pero no lo use a menos que esté 100% seguro. El problema es que solo funciona en el momento en que lo hace y probablemente no más tarde (nivel de parche, esquema, índice, recuento de filas, etc.)...

Ejemplo resuelto

Esto puede fallar porque no sabe en qué orden se evalúan las cosas

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

Y esto también puede fallar porque

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

Sin embargo, esto no sucedió en SQL Server 2000. La consulta interna se evalúa y se pone en cola:

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

Tenga en cuenta que esto todavía funciona en SQL Server 2005

SELECT TOP 2000000000 ... ORDER BY...