Usuário com melhor resposta
Erro bizarro IDENTITY_INSERT.

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.????????????
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
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
-
-
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
-
-
-
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.
-
-
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
-
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.