Eu tenho o erro abaixo quando executo o seguinte script. Qual é o erro e como ele pode ser resolvido?
Insert table(OperationID,OpDescription,FilterID)
values (20,'Hierachy Update',1)
Erro:
Servidor: mensagem 544, nível 16, estado 1, linha 1
Não é possível inserir um valor explícito para a coluna de identidade na tabela 'table' quando IDENTITY_INSERT está definido como OFF.
sql
sql-server
sybase
Martin Clayton
fonte
fonte
Respostas:
Você está inserindo valores, pois
OperationId
é uma coluna de identidade.Você pode ativar a inserção de identidade na tabela assim para poder especificar seus próprios valores de identidade.
fonte
não coloque valor em OperationID porque ele será gerado automaticamente. tente isto:
fonte
isso está funcionando apenas em uma única tabela de banco de dados, por exemplo, se o nome da tabela for aluno, a consulta será semelhante a esta
SET IDENTITY_INSERT student ON
fonte
Tenha muito cuidado ao definir IDENTITY_INSERT como ON. Essa é uma prática ruim, a menos que o banco de dados esteja no modo de manutenção e definido como usuário único. Isso afeta não apenas a sua inserção, mas também as de qualquer outra pessoa tentando acessar a tabela.
Por que você está tentando colocar um valor em um campo de identidade?
fonte
Existem basicamente duas maneiras diferentes de INSERIR registros sem ter um erro:
1) Quando o IDENTITY_INSERT está desativado. A CHAVE PRIMÁRIA "ID" NÃO DEVE ESTAR PRESENTE
2) Quando o IDENTITY_INSERT está ativado. A CHAVE PRIMÁRIA "ID" DEVE ESTAR PRESENTE
Conforme o exemplo a seguir da mesma tabela criada com uma CHAVE PRIMÁRIA DE IDENTIDADE:
1) No primeiro exemplo, você pode inserir novos registros na tabela sem obter um erro quando o IDENTITY_INSERT estiver desativado. A chave primária "ID" não devem estar presentes nas Demonstrações "INSERT INTO" e um valor de identificação exclusivo será adicionado automaticamente . Se o ID estiver presente no INSERT, nesse caso, você receberá o erro "Não é possível inserir um valor explícito para identificar a coluna na tabela ..."
SAÍDA da TABELA [dbo]. [Pessoas] será:
2) No segundo exemplo, você pode inserir novos registros na tabela sem obter um erro quando o IDENTITY_INSERT estiver ativado. A PRIMARY KEY "ID" DEVE ESTAR PRESENTE nas instruções "INSERT INTO" desde que o valor da ID ainda não exista : Se a ID NÃO estiver presente na INSERT nesse caso, você receberá o erro "O valor explícito deve ser especificado para a tabela da coluna de identidade ... "
SAÍDA da TABELA [dbo]. [Pessoas] será:
fonte
Na sua entidade para essa tabela, adicione o
DatabaseGenerated
atributo acima da coluna para a qual a inserção de identidade está definida:Exemplo:
fonte
DatabaseGeneratedOption.Identity
e ainda recebo o erro. A culpa é minha, estou colocando pseudo-IDs nas novas linhas para diferenciá-los um do outro na minha página da web e espero simplesmente anulá-los antes queinsert
seja suficiente.você pode simplesmente usar esta declaração, por exemplo, se o nome da sua tabela for Escola . Antes da inserção make certeza identity_insert está definido para ON e depois da inserção consulta vez identity_insert OFF
fonte
Se você estiver usando o liquibase para atualizar seu SQL Server, provavelmente está tentando inserir uma chave de registro em um campo autoIncrement. Ao remover a coluna da inserção, seu script deve ser executado.
fonte
Há OperationId pré-mencionado na sua consulta que não deve estar lá, pois é aumentado automaticamente
então sua consulta será
fonte
Outra situação é verificar se a Chave Primária tem o mesmo nome que em suas classes, onde a única diferença é que sua chave primária possui um 'ID' anexado a ela ou especificar [Chave] nas chaves primárias que não estão relacionadas a como o classe é nomeada.
fonte
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
na coluna PrimaryKey e verifique se está definida como um tipo de dados int . Se a coluna for a chave primária e estiver configurada como IsIDentity como true no SQL, não há necessidade dessa linha de código[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
fonte
A melhor solução é usar anotação
GeneratedValue(strategy = ...)
, ou seja,diz que esta coluna é gerada pelo banco de dados usando a estratégia IDENTITY e você não precisa cuidar - o banco de dados fará isso.
fonte
Se você está tendo esse problema ao usar um servidor sql com o npm sequelize-typescript, adicione
@AutoIncrement
a coluna ID:fonte
E se você estiver usando o Oracle SQL Developer para se conectar, lembre-se de adicionar / sqldev: stmt /
/ sqldev: stmt / define identidade_insira TABELA ativada;
fonte
Não sei ao certo qual é o uso da "Inserir tabela", mas se você estiver apenas tentando inserir alguns valores, tente:
Recebi a mesma mensagem de erro, mas acho que isso deve funcionar. O ID deve ser incrementado automaticamente automaticamente, desde que seja uma chave primária.
fonte
Resolvi esse problema criando um novo objeto toda vez que desejo adicionar algo ao banco de dados.
fonte
Observe que se você estiver fechando cada linha com
;
, oSET IDENTITY_INSERT mytable ON
comando não será válido para as seguintes linhas.ou seja,
uma consulta como
Dá o erro
Cannot insert explicit value for identity column in table 'mytable' when IDENTITY_INSERT is set to OFF.
Mas uma consulta como esta funcionará:
Parece que o
SET IDENTITY_INSERT
comando é válido apenas para uma transação, e;
isso significa o fim de uma transação.fonte
O problema foi causado pelo uso de DBContext ou DBSet não digitado, se você usar a Interface e implementar o método de alterações de maneira genérica
Se este for o seu caso, proponho DBContex fortemente tipado, por exemplo
então
.Savechanges
vai funcionarfonte
Simplesmente exclua as tabelas que são arrastadas para o arquivo .dbml e arraste-as novamente. Em seguida, Limpe a solução> Reconstruir solução> Criar solução.
Isso é o que funcionou para mim.
Eu não fiz a tabela sozinho, estava usando VS e SSMS, segui este link para a identidade do ASP.NET: https://docs.microsoft.com/en-us/aspnet/identity/overview/getting-started/ adicionando-aspnet-identidade-a-um-vazio-ou-existente-web-forms-projeto
fonte