Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Por que usar Select Top 100%?


Foi usado para "materialização intermediária (pesquisa no Google)"

Bom artigo:Adam Machanic:Explorando os segredos da materialização intermediária

Ele até criou um MS Connect para que isso possa ser feito de maneira mais limpa

Minha visão "não é inerentemente ruim", mas não a use a menos que tenha 100% de certeza. O problema é que funciona apenas no momento em que você faz isso e provavelmente não mais tarde (nível de patch, esquema, índice, contagens de linhas etc) ...

Exemplo trabalhado


Isso pode falhar porque você não sabe em que ordem as coisas são avaliadas
SELECT foo From MyTable WHERE ISNUMERIC (foo) = 1 AND CAST(foo AS int) > 100

E isso também pode falhar porque
SELECT foo
FROM
    (SELECT foo From MyTable WHERE ISNUMERIC (foo) = 1) bar
WHERE
    CAST(foo AS int) > 100

No entanto, isso não aconteceu no SQL Server 2000. A consulta interna é avaliada e colocada em spool:
SELECT foo
FROM
    (SELECT TOP 100 PERCENT foo From MyTable WHERE ISNUMERIC (foo) = 1 ORDER BY foo) bar
WHERE
    CAST(foo AS int) > 100

Observe que isso ainda funciona no SQL Server 2005
SELECT TOP 2000000000 ... ORDER BY...