Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

advaldomesquita

[Resolvido] Clausula semelhante ao LIMIT do MySQL

Recommended Posts

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 DESC
) AS r2 ORDER BY coluna ASC

Lembrando que o segundo TOP é variável e é sempre o registro inicial + limite. Ou, se você pensar por paginas, o valor será sempre numero da pagina * limite. Assim fica fácil automatizar o script.

Outra 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 y

Onde x e y são o inicio e o fim da busca. Muito mais rápido do que a primeira solução.

 

 

Fonte: http://forum.imasters.com.br/index.php?showtopic=298305

autor: pedro wtf

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.