locked
Select de range de registros físicos RRS feed

  • Pergunta

  • Olá pessoal.

    Gostaria de saber se tem como fazer um select de determinado intervalo de registros físicos de uma tabela, por exemplo: quero os dados entre o 5º e o 10º registro físico, desconsiderando os "where".

    Obrigado,
    segunda-feira, 16 de julho de 2007 13:19

Todas as Respostas

  •  

    Carlos,

     

    Voce tem um índice em cluster nesta tabela? Qual seria a estrutura desta tabela ?

     

     

    segunda-feira, 16 de julho de 2007 13:22
  • Na verdade, não tenho uma tabela ainda, pois preciso saber se esta operação existe no SQL Server, no entanto, a minha consulta não deverá obedecer o índice. Vou dar um exemplo de tabela:

     

    Nome                    Idade      UF

    -----------------------------------------------------------------------

    Carlos                  21            SC

    Maria                   20            SP

    João                    30             RJ

    Ana                      25            DF

     

    Quero fazer um select que me retorne o 2º e o 3º registro, desconsiderando o índice. Logo, deveria ser retornado o range com os registros de Maria e João.

    segunda-feira, 16 de julho de 2007 13:28
  • Carlos,

     

    O que você poderia fazer é criar nesta sua table, um campo por exemplo chamada Sequencial do tipo Inteiro, e este campos possuir a opção Identity(1,1), desta forma, será criada uma seqüência lógica dos registros em sua table, com isso você poderia fazer a seleção desejada.

     

    Veja o exemplo criado no SQL Server 2005:

     

    Create Table Produtos

     (Codigo Int,

       Descricao VarChar(50),

       Sequencial Int Identity(1,1))

     

    Insert Into Produtos (@@Identity, Descricao+' - '+Convert(VarChar(3),@@Identity))

    Go 100

     

    Select * from Produtos

     Where Sequencial BetWeen 5 And 10

     

    No SQL Server 2000:

     

    Declare @Contador Int

     

    Set @Contador = 1

     

    Create Table Produtos

     (Codigo Int,

       Descricao VarChar(50),

       Sequencial Int Identity(1,1))

     

    While @Contador <100 

     Begin

      Insert Into Produtos (@@Identity, Descricao+' - '+Convert(VarChar(3),@@Identity))

      Go

     

      Set @Contador= @Contador+1

    End

     

    Select * from Produtos

     Where Sequencial BetWeen 5 And 10

     

    Qualquer dúvida estou a disposição.

    segunda-feira, 16 de julho de 2007 13:59
  • Valeu Junior, mas eu pensei que houvesse uma outra forma de buscar o registro em sequência física, pois vou precisar usar isso tanto em tabelas novas como em tabelas já existentes.

     

    De qualquer forma, obrigado pela atenção.

    segunda-feira, 16 de julho de 2007 14:04
  • Carlos,

     

    Não sei se pode te ajudar mas se tratando de SQL2005 tem esse código que pode te ajudar.

     

    WITH TABELATEMP AS ( SELECT ROW_NUMBER() OVER(ORDER BY IDTABELA ASC ) NUMERACAO, * FROM TABELA )

    SELECT * FROM TABELATEMP

    WHERE NUMERACAO BETWEEN 3 AND 5

     

    []'s

    quinta-feira, 7 de agosto de 2008 20:40