Usuário com melhor resposta
Como simular a sentença Limit no sql server 2000

Pergunta
-
Ola pessoal no mysql existe o LIMIT 5,10 que retornaria as linhas de 5 a 10 da minha resposta global.
como eu simularia isso no sql server ? estou tentanto fazer uma paginação.
valew!quarta-feira, 30 de maio de 2007 20:20
Respostas
-
e resolver somente como uma query ?
exemplo vi pessoas usando select * from (select top ...) e mais alguns tops mais não entendi ainda com funciona.quinta-feira, 31 de maio de 2007 12:41 -
select * from (
select top 10 emp_id,lname,fname from (
select top 30 emp_id,lname,fname
from employee
order by lname asc
) as newtbl order by lname desc
) as newtbl2 order by lname aschttp://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=850&lngWId=5
Você provavelmente está usando PHP e era um usuário acíduo do MySql... diria que na plataforma .net /sql2005 existem formas mais inteligentes de se fazer paginação
...
Abraço!
quarta-feira, 13 de junho de 2007 12:35
Todas as Respostas
-
Olá,
No SQL 2000 não existe opção direta para fazer isso. Teria que utilizar outra opção como incluir os dados dentro de uma tabela temporária com um campo auto-incremento e então escolher os dados que estão no intervalo que você deseja baseado no auto-incremento.
quinta-feira, 31 de maio de 2007 01:25 -
Realmente se fosse no sql 2005 com o rownumber vc. resolveria, mais vc. pode usar uma variavel table com um identity como alternativa +- assim
Declare @VarTable Table (Idx int identity(1,1), campo1 int)
Insert into @VarTable (campo1) Select campo1 from tabela
Select * From @Vartable Where Idx in (5,1)
entao neste caso se for uma consulta constante vc. pode criar uma function que retorne os dados em uma table e usar +- como se fosse uma view so que com os os indices de linha que vc. precisa
qualquer coisa retorne.
Abs;
quinta-feira, 31 de maio de 2007 10:15 -
Marcelo,
Gostei do exemplo.
Em relação a utilização da View, fiquei um pouco em dúvida pois o que entendi é que este processo será realizado várias vezes, neste caso, ele terá a necessidade ficar atualizando o View.
Poderia utilizar a stored procedure sp_refreshview para atualizar esta view!!!!
quinta-feira, 31 de maio de 2007 11:16 -
na verdade nao indiquei a view e sim uma funcao que retorne uma table assim vc. usa como se fosse uma view, a procedure nao e recomendada neste caso pois vai recompilar todas as veszs nao mantendo o plano de exeucao por conta da necessidade de uso de ou variavel table ou uma tabela temporaria.
Abs;
quinta-feira, 31 de maio de 2007 11:47 -
e resolver somente como uma query ?
exemplo vi pessoas usando select * from (select top ...) e mais alguns tops mais não entendi ainda com funciona.quinta-feira, 31 de maio de 2007 12:41 -
e que ao fazer a funcao vc. resolve com uma query so que vc. faz a query na funcao, assim usando select top .... realmente na minha opnicao nao seria muito bom. porque vc. quer pegar linhas especificas tipo a linha x e y e nao todas as linhas dentro de um range de linhas.
Abs;
quinta-feira, 31 de maio de 2007 13:43 -
mais na verdade eu quero pegar um range de linha.
estou fazendo uma paginação. só que estou testando esta solução com top parece que tem um bug.quinta-feira, 31 de maio de 2007 14:35 -
select * from (
select top 10 emp_id,lname,fname from (
select top 30 emp_id,lname,fname
from employee
order by lname asc
) as newtbl order by lname desc
) as newtbl2 order by lname aschttp://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=850&lngWId=5
Você provavelmente está usando PHP e era um usuário acíduo do MySql... diria que na plataforma .net /sql2005 existem formas mais inteligentes de se fazer paginação
...
Abraço!
quarta-feira, 13 de junho de 2007 12:35 -
na verdade uso jsp. Utilizei isso mesmo... mais tem que fazer algumas validações via código... pois tem alguns bugs esse select. ele pode trazer registro repetido.quarta-feira, 13 de junho de 2007 17:13
-
Colegas,
Segue abaixo uma maneira simples para fazer o limit no Sql Server, seguindo a idéia da paginação...
' Exibindo os primeiros 10 registros
select top 10 * from nfe order by id desc -> 2018 - 2009
' Exibindo mais 10 registros após os 10 primeiros
select top 10 * from nfe where id <= (select max(id) from nfe) - 10 order by id desc -> 2008 - 1999
' Exibindo mais 10 registros após os 20 primeiros
select top 10 * from nfe where id <= (select max(id) from nfe) - 20 order by id desc -> 1998 - 1989
' Exibindo mais 10 registros após os 30 primeiros
select top 10 * from nfe where id <= (select max(id) from nfe) - 30 order by id desc -> 1988 - 1979
' Exibindo mais 10 registros após os 40 primeiros
select top 10 * from nfe where id <= (select max(id) from nfe) - 40 order by id desc -> 1978 - 1969
Easy!!!!
abs...
Rodrigo
quinta-feira, 25 de setembro de 2008 19:56 -
Oi Pessoal,
pensei em um jeito diferente, jeito que desse para qualquer consulta.
Select t3.*
from
(
--Colocando ROW NUMBER emcima da constante.
select ROW_NUMBER() OVER(ORDER BY t2.const DESC) as cont, t2.*
from
(
--Adicionando uma constante
select '' as const, t1.*
from (
--Qualquer SELECT
Select us.* from USUARIO as us
) as t1
) as t2
) as t3
where t3.cont between 31 and 40;olhem ai, vejam se da para menhorar.
Abrs
JP
quinta-feira, 5 de agosto de 2010 18:05