02/06/2014

Problemas com inserção em um campo Identity

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?
[img:descricao=Identity]http://arquivo.devmedia.com.br/forum/imagem/368482-20140602-114503.jpg[/img]

Odilon Junior

Respostas

03/06/2014

Odilon Junior

Alguém pode me ajudar?
Responder Citar

04/06/2014

Jefferson Santos

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

04/06/2014

Joel Rodrigues

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.
Responder Citar

04/06/2014

Odilon Junior

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:

[img:descricao=Identity]http://arquivo.devmedia.com.br/forum/imagem/368482-20140604-155359.jpg[/img]
Responder Citar

04/06/2014

Odilon Junior

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.
Responder Citar

04/06/2014

Jefferson Santos

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.
Responder Citar

04/06/2014

Itamar Souza

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.
Responder Citar

04/06/2014

Joel Rodrigues

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?
Responder Citar

05/06/2014

Odilon Junior

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.
Responder Citar

05/06/2014

Joel Rodrigues

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.
Responder Citar

05/06/2014

Odilon Junior

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