none
Select que pega o próximo numero ou numero que não esta sendo utilizado RRS feed

  • Pergunta

  • Tenho uma tabela chamada Identificadores_pessoas onde tenho (id_pessoa e numero) quero fazer um select que pegaria o próximo numero ou numero que não esta sendo utilizado, alguém já fez algo do tipo ?


    Atenciosamente,
    José Henrique Sabino

    segunda-feira, 16 de novembro de 2015 11:30

Respostas

  • pessoa_cartao é o nome da tabela? essas funções pedem o NOME DA TABELA e precisa estar entre aspas simples!

    O modelo que você enviou Antonio é falho, porque o último ID da tabela pode não ser o o corrente...exemplo

    eu adiciono o ID  = 1

    dai adiciono o ID = 2

    DAÍ DELETO O ID = 2 

    se fiz um select max ele vai trazer o 1 somando com +1 = 2 o que seria errado...afinal o id corrente ainda seria dois que somando com 1 seria 3

    José você precisa pegar o que exatamente? o número ou o ID? se for somente o número o SELECT do Antonio poderá te ajudar...mas a sequencia é de 1 em 1 mesmo?

    • Editado Diego de Oliveira Neves segunda-feira, 16 de novembro de 2015 17:11
    • Marcado como Resposta Xarp2 segunda-feira, 16 de novembro de 2015 18:00
    segunda-feira, 16 de novembro de 2015 17:08
  • José,

    O comando 

    SELECT IDENT_CURRENT('Nome da Tabela') + IDENT_INCR('Nome da Tabela')

    funciona, mas voce tem que respeitar os apostrofos:

    no seu caso o comando seria:

    SELECT IDENT_CURRENT('pessoa_cartao') + IDENT_INCR('pessoa_cartao')

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    • Marcado como Resposta Xarp2 segunda-feira, 16 de novembro de 2015 18:00
    segunda-feira, 16 de novembro de 2015 17:34

Todas as Respostas

  • Bom dia,

    Não sei se entendi corretamente a sua questão, mas experimente fazer um teste:

    select top(1) i.numero + 1 as ProximoNumero
    from Identificadores_pessoas as i
    left join Identificadores_pessoas as p
        on 
            p.id_pessoa = i.id_pessoa and
            p.numero = i.numero + 1
    where
        i.id_pessoa = @id_pessoa and
        p.numero is null
    order by
        i.numero

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    segunda-feira, 16 de novembro de 2015 11:38
  • Bom dia, esse campo é identificador da tabela (chave primária)? 

    Se for, veja:

    SELECT IDENT_CURRENT('Nome da Tabela') + IDENT_INCR('Nome da Tabela')
    Eu pego o ID atual em uso (mesmo que ele já não exista mais na tabela) e somo com o auto incremento da tabela...é a maneira exata de se obter o próximo id.

    segunda-feira, 16 de novembro de 2015 11:39
  • Sim e chave Primaria, esses comando que vocês passaram não deram certo, o Primeiro não me retorna nada e o segundo da que coluna não existe mais no meu banco tenho ela sim


    Atenciosamente,
    José Henrique Sabino

    segunda-feira, 16 de novembro de 2015 16:36
  • No comando que passei, qual é o problema que ocorre?
    segunda-feira, 16 de novembro de 2015 16:51

  • Atenciosamente,
    José Henrique Sabino

    segunda-feira, 16 de novembro de 2015 16:59
  • José, boa tarde.

    Será que não seria isso:

    select MAX(Numero) + 1
    from Identificadores_pessoas 

    Antonio Cesar

    • Editado Antonio Cesar segunda-feira, 16 de novembro de 2015 17:00
    segunda-feira, 16 de novembro de 2015 17:00
  • pessoa_cartao é o nome da tabela? essas funções pedem o NOME DA TABELA e precisa estar entre aspas simples!

    O modelo que você enviou Antonio é falho, porque o último ID da tabela pode não ser o o corrente...exemplo

    eu adiciono o ID  = 1

    dai adiciono o ID = 2

    DAÍ DELETO O ID = 2 

    se fiz um select max ele vai trazer o 1 somando com +1 = 2 o que seria errado...afinal o id corrente ainda seria dois que somando com 1 seria 3

    José você precisa pegar o que exatamente? o número ou o ID? se for somente o número o SELECT do Antonio poderá te ajudar...mas a sequencia é de 1 em 1 mesmo?

    • Editado Diego de Oliveira Neves segunda-feira, 16 de novembro de 2015 17:11
    • Marcado como Resposta Xarp2 segunda-feira, 16 de novembro de 2015 18:00
    segunda-feira, 16 de novembro de 2015 17:08
  • José,

    Você consegue nos passar um exemplo dos dados que você tem o que você deseja conseguir?

    Se você quer pegar esse "próximo número" e inserir na tabela que está como auto incremento, você vai precisar, primeiro desabilitar o identity para realizar a inserção e, então habilitar.

    Se não estiver com o identity habilitado nas tabelas, a consulta do Diego não vai funcionar (apesar de no teu print de erro, o problema foi você não ter colocado o nome da tabela entre aspas simples, como ele já mencionou).

    Estou pedindo um exemplo pois eu tenho a impressão que a consulta do gapimex é o que você precisa...

    []'s!


    /* Logan Destefani Merazzi - DBA | @LoganMerazzi | http://www.merazzi.eti.br
    Se a resposta for útil, vote nela. Se resolveu, marque-a como resposta. */

    segunda-feira, 16 de novembro de 2015 17:26
  • José,

    O comando 

    SELECT IDENT_CURRENT('Nome da Tabela') + IDENT_INCR('Nome da Tabela')

    funciona, mas voce tem que respeitar os apostrofos:

    no seu caso o comando seria:

    SELECT IDENT_CURRENT('pessoa_cartao') + IDENT_INCR('pessoa_cartao')

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    • Marcado como Resposta Xarp2 segunda-feira, 16 de novembro de 2015 18:00
    segunda-feira, 16 de novembro de 2015 17:34