none
Erro bizarro IDENTITY_INSERT. RRS feed

  • Pergunta

  • Vejam que bizarro este erro:

    Query:

    SET IDENTITY_INSERT CARTAO ON
    GO
    INSERT INTO CARTAO(ID_CARTAO, ID_CENTRO_CUSTO, ID_PESSOA, NUMERO_CARTAO, SEQUENCIAL, SITUACAO, SALDO_SAQUE, SALDO_COMPRA, AUD_VERSAO, AUD_DATA, AUD_ATIVO, AUD_USUARIO, SENHA_CARTAO, TENTATIVAS_SENHA)
    VALUES(1, 2, 20, '0040010002', 1, 'A', 4.00, 0.04, 76, '20110224 00:45:00', 'A', 0, '6480', 0)
    GO


    Erros:

    Msg 8107, Level 16, State 1, Line 1
    IDENTITY_INSERT is already ON for table 'master.dbo.CARTAO'. Cannot perform SET operation for table 'CARTAO'.
    Msg 544, Level 16, State 1, Line 1
    Cannot insert explicit value for identity column in table 'CARTAO' when IDENTITY_INSERT is set to OFF.

    ????????????

    terça-feira, 27 de novembro de 2012 11:27

Respostas

  • Pessoal, não funcionou.

    O que tive que fazer, criar uma expressão regular para remover o primeiro campo após os parênteses (que são os ids).

    Ai dei um replace all e consegui remover os id's do script e funcionou.

    Segue a expressão:

    ([^\(]+\()[^,]+, (.+)$

    Substituir por:

    \1\2

    Obrigado pelas respostas!

    • Marcado como Resposta Ricardo Russo quarta-feira, 9 de janeiro de 2013 12:35
    terça-feira, 27 de novembro de 2012 12:13

Todas as Respostas

  • O erro está dizendo que você não pode inserir valores quando um campo for identity, ele vai incrementar o valor do campo baseando-se na regra especificada no momento da criação da tabela.

    Tenta retirar o valor passado para o  campo ID_CARTAO e omita ele dos campos a serem inseridos, retira também o

    SET IDENTITY_INSERT CARTAO ON

    Já está habilitado na tabela. Deve ficar mais ou menos assim o insert:

    INSERT INTO CARTAO(ID_CENTRO_CUSTO, ID_PESSOA, NUMERO_CARTAO, SEQUENCIAL, SITUACAO, SALDO_SAQUE, SALDO_COMPRA, AUD_VERSAO, AUD_DATA, AUD_ATIVO, AUD_USUARIO, SENHA_CARTAO, TENTATIVAS_SENHA)
    VALUES(2, 20, '0040010002', 1, 'A', 4.00, 0.04, 76, '20110224 00:45:00', 'A', 0, '6480', 0)


    Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.



    • Editado Marcos Rocha terça-feira, 27 de novembro de 2012 11:41
    terça-feira, 27 de novembro de 2012 11:34
  • Mas eu estou usando o comando : 
    SET IDENTITY_INSERT CARTAO ON
    terça-feira, 27 de novembro de 2012 11:39
  • O erroa abaixo está dizendo que por já estar definido o IDENTITY_INSERT como ON na tabela você não pode mais eltrar essa propriedade, por isso quando você tenta 'ligar' o IDENTITY_INSERT ele dá erro, pois já está habilitado.

    Msg 8107, Level 16, State 1, Line 1
    IDENTITY_INSERT is already ON for table 'master.dbo.CARTAO'. Cannot perform SET operation for table 'CARTAO'.


    Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    • Marcado como Resposta MarceloSchneider terça-feira, 27 de novembro de 2012 11:45
    • Não Marcado como Resposta MarceloSchneider terça-feira, 27 de novembro de 2012 11:45
    terça-feira, 27 de novembro de 2012 11:43
  • Então... está on.

    Mas logo abaixo diz que está off quando tento inserir o insert, pq isso?

    terça-feira, 27 de novembro de 2012 11:45
  • Marcelo,

    Você pode usar o comando DBCC CHECKIDENT, e ver o traz no resultado.


    Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    terça-feira, 27 de novembro de 2012 11:56
  • Marcelo,

    Aparentemente você criou uma tabela chamada CARTAO na base master e configurou a propriedade ON para a mesma. Então você deve ter mudado o contexto do banco e está tentando setar a propriedade para a tabela CARTAO de outra base. Como o controle é feito por session você encontrará este erro. 

    Reconfigure a propriedade da tabela CARTAO na base master para OFF, então volte para o banco que você deseje trabalhar e tente configurar a propriedade da tabela CARTAO neste banco para ON.

    Abs.

    terça-feira, 27 de novembro de 2012 12:04
  • Marcelo,


    Verifique se o usuário que está efetuando essa operação tem permissão (ALTER) para a tabela, caso contrário não conseguirá.


    Abçs,

    Juliano

    terça-feira, 27 de novembro de 2012 12:11
  • Pessoal, não funcionou.

    O que tive que fazer, criar uma expressão regular para remover o primeiro campo após os parênteses (que são os ids).

    Ai dei um replace all e consegui remover os id's do script e funcionou.

    Segue a expressão:

    ([^\(]+\()[^,]+, (.+)$

    Substituir por:

    \1\2

    Obrigado pelas respostas!

    • Marcado como Resposta Ricardo Russo quarta-feira, 9 de janeiro de 2013 12:35
    terça-feira, 27 de novembro de 2012 12:13
  • Pessoal, não funcionou.

    O que tive que fazer, criar uma expressão regular para remover o primeiro campo após os parênteses (que são os ids).

    Ai dei um replace all e consegui remover os id's do script e funcionou.

    Segue a expressão:

    ([^\(]+\()[^,]+, (.+)$

    Substituir por:

    \1\2

    Obrigado pelas respostas!


    Marcelo, para que o SET IDENTITY_INSERT funcione o usuário deve ser dono da tabela ou possuir a permissão de ALTER.
    terça-feira, 27 de novembro de 2012 12:19