Array
(
)

Problemas com inserção em um campo Identity

Odilon Junior
   - 02 jun 2014

Bom dia,
Tive que excluir um registro em uma tabela que possui a função identity habilitada.
Ao tentar fazer um update na mesma posição em que exclui o registro, o banco me retorna que nenhum registro foi inserido.
Como faço para usar essa posição existente no banco?
Identity (Clique na imagem para abrir em uma nova janela)

Odilon Junior
   - 03 jun 2014

Alguém pode me ajudar?

Jefferson Santos
   - 04 jun 2014

Tente desabilitar o campo identity, faça o update e logo após habilite novamente.
Para isso utilize o identity_insert.

Joel Rodrigues
   - 04 jun 2014

Olá, Odilon. Não compreendi bem seu problema. Poderia explicar novamente, por favor?
Entendi que você está tentando alterar um registro que foi excluído, é isso? Se for, faz sentido que não retorne nenhuma linha alterada, pois o registro que você está tentando alterar não existe mais.

Odilon Junior
   - 04 jun 2014


Citação:
Tente desabilitar o campo identity, faça o update e logo após habilite novamente.
Para isso utilize o identity_insert.


Eu ja tentei desabilitar, e quando vou inserir dados, dá a seguinte mensagem:

Identity (Clique na imagem para abrir em uma nova janela)

Odilon Junior
   - 04 jun 2014


Citação:
Olá, Odilon. Não compreendi bem seu problema. Poderia explicar novamente, por favor?
Entendi que você está tentando alterar um registro que foi excluído, é isso? Se for, faz sentido que não retorne nenhuma linha alterada, pois o registro que você está tentando alterar não existe mais.


Oi Joel.
O que ocorre é que deu um erro na inserção de um certo dado. Esse dado seria inserido em um campo com o identity habilitado. Porém como esse dado não foi inserido, o próximo dado foi inserido pulando essa posição. No caso, o dado1 ficou com id = 1 e o dado 2 ficou com o id = 3.

Fiz um select no id = 2 e tive um retorno mostrando apenas o nome das colunas da tabela sem registro nenhum.

Daí, desabilitei o identity, fiz um delete from tbl_midia where id_midia = 2 e tentei inserir dados utilizando o id_midia = 2.

Queria saber se perdi essa posição na tabela e se tem como recuperar somente a posição.

Jefferson Santos
   - 04 jun 2014

Tente desabilitar o campo identity, faça o update e logo após habilite novamente.
Para isso utilize o identity_insert ou no modo grafico desabilite o Identity.

Os campos identity em casos de erro eles pulam o sequencial, por isso você não conseguiu.

Itamar Souza
   - 04 jun 2014

Amigo
Quando o campo tem um identity habilitado, após excluir o registro aquela posição não vai mais existir mais também não conseguira utiliza-la. Você não vai conseguir usar update para preencher o campo, se você quer usar aquela posição, você vai ter que desabilitar o identity do campo e depois dar um insert no campo usando o id que precisa, mais toma cuidado, e arriscado fazer isso em produção, fora que pode ter integração com outras tabelas e vai afetar a inserção diretamente, assim que tira o identity vai gera erro no sistema é bom testar antes em um banco de backup.

Joel Rodrigues
   - 04 jun 2014

Rapaz, você REALMENTE precisa fazer isso? Se o identity funciona dessa forma por padrão é porque existem motivos. É realmente importante você "recuperar" o ID 2? Será que você vai precisar ficar fazendo isso sempre?

Odilon Junior
   - 05 jun 2014


Citação:
Rapaz, você REALMENTE precisa fazer isso? Se o identity funciona dessa forma por padrão é porque existem motivos. É realmente importante você "recuperar" o ID 2? Será que você vai precisar ficar fazendo isso sempre?


Na verdade não é tão importante assim . Mas gostaria de saber se tem jeito de recuperar caso eu necessite.
Tudo que estou fazendo, é em ambiente de homologação. É o primeiro banco de dados que implemento e estou fazendo
todos os testes possíveis antes de colocá-lo em produção.

Joel Rodrigues
   - 05 jun 2014

Para inserir valores em campos identity você deve proceder como o amigo acima falou. Porém, reforço que se for preciso controlar manualmente os valores dessa coluna, pode ser mais viável que ela não seja identity. E pense bem antes de "recuperar" um valor automático, pois isso pode causar grandes dores de cabeças com os relacionamentos.

Odilon Junior
   - 05 jun 2014

Mas eu ja tentei isso. Desabilitei o identity e tentei inserir o valor no campo "vago".
Só que não deu certo.