locked
Como simular a sentença Limit no sql server 2000 RRS feed

  • 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 asc

    http://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 Wink...

     

     

    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 asc

    http://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 Wink...

     

     

    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