none
Identity Erro RRS feed

  • Pergunta

  • Estava ocorrendo erro ao inserir em uma Tabela, violacao de Primary Key. Olhei a tabela e esta setado Identity. Nao entendi, entao retirei o Identity e salvei a tabela, e depois adicionei o Identity e funcionou.

    O que pode ser? Essa tabela estava funcionando a muito tempo.

    Obrigado!!!

    terça-feira, 22 de maio de 2012 20:27

Respostas

  • Davi,

         Esse problema aconteceu porque alguém "resetou" o contador do seu campo IDENTITY... Isso é feito através do comando DBCC CHECKIDENT... Provavelmente o que aconteceu foi o seguinte:

          - Tabela criada com IDENTITY(1,1)

          - x (20, por exemplo) inserções na sua tabela, o contador do IDENTITY estará em 20.

          - DBCC CHECKIDENT (TABELA, RESEED, 1) -- O contador do IDENTITY voltou para 1.

          - Ao fazer um insert, o código que ele tentará utilizar é o 1, como o código 1 já existe na tabela, ele vai dar erro de violação de PK.

         Espero ter ajudado.


    Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008

    • Marcado como Resposta DaviSaba terça-feira, 22 de maio de 2012 21:04
    terça-feira, 22 de maio de 2012 21:01
    Moderador

Todas as Respostas

  • Provavelmente você estava tentando dar um INSERT passando a coluna que é IDENTITY, o que não é possível, só será possível dar o INSERT se você desabilitar a IDENTITY.

    Deve ser isso,

    Abraços!


    thiagokoelho

    terça-feira, 22 de maio de 2012 20:46
  • Davi,

         Esse problema aconteceu porque alguém "resetou" o contador do seu campo IDENTITY... Isso é feito através do comando DBCC CHECKIDENT... Provavelmente o que aconteceu foi o seguinte:

          - Tabela criada com IDENTITY(1,1)

          - x (20, por exemplo) inserções na sua tabela, o contador do IDENTITY estará em 20.

          - DBCC CHECKIDENT (TABELA, RESEED, 1) -- O contador do IDENTITY voltou para 1.

          - Ao fazer um insert, o código que ele tentará utilizar é o 1, como o código 1 já existe na tabela, ele vai dar erro de violação de PK.

         Espero ter ajudado.


    Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008

    • Marcado como Resposta DaviSaba terça-feira, 22 de maio de 2012 21:04
    terça-feira, 22 de maio de 2012 21:01
    Moderador
  • Roberto, voce tem razão. Entendi o que conteceu entao, porque ele estava tentando criar o ID 5 e o produto ja estava no 2 mil e poucos.

    Valeu.

    terça-feira, 22 de maio de 2012 21:03