Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Existe uma técnica que consistem em fazer subselects. Imagine que você queiralimitar sua busca por 20 registros. O Top faz o serviço:
SELECT TOP(20) * FROM tabela;
Agora, e se quisermos apenas os registros a partir da pagina 3 (ou seja, a partir do 41)?
Selecionamos um TOP 40+20 e, a partir desta seleção, pegamos o TOP(20) de cima para baixo, ou seja, do 60 até o 41.
Para terminar pegamos todas as ocorrências do último SELECT reordenando de maneira correta.
Veja:
SELECT * FROM
(
SELECT TOP(20) FROM
(
SELECT TOP(60) * FROM tabela ORDER BY coluna ASC
) AS r1 ORDER BY coluna DESCOutra dica é que, para o Sql Server 2005, o valor do TOP pode ser uma variável ou um parâmetro de Stored Procedure desde que ele seja escrito entra parênteses.
Esse truque funciona bem para tabelas pequenas, pois o custo de um ORDER BY é alto.
--UPDATE
Para Sql Server 2005 existe a seguinte solução:
WITH resultado AS
(
SELECT *, ROW_NUMBER() OVER (ORDER BY coluna) AS linha FROM tabela
)
SELECT * FROM resultado WHERE linha BETWEEN x AND yFonte: http://forum.imasters.com.br/index.php?showtopic=298305
autor: pedro wtf