当我执行下面的脚本时,我有以下错误。错误是关于什么,如何解决?

Insert table(OperationID,OpDescription,FilterID)
values (20,'Hierachy Update',1)

错误:

服务器:Msg 544,级别16,状态1,线路1 当IDENTITY_INSERT设置为OFF时,无法为表'table'中的标识列插入显式值。


当前回答

你可以简单地使用这句话,例如,如果你的表名是学校。 在插入之前,确保identity_insert设置为ON,在插入查询之后,将identity_insert设置为OFF

SET IDENTITY_INSERT School ON
/*
  insert query
  enter code here
*/
SET IDENTITY_INSERT School OFF

其他回答

如果您使用Interface并以通用方式实现savechanges方法,则会出现使用非类型化DBContext或DBSet的问题

如果这是您的情况,我建议使用强类型的dbcontext

MyDBContext.MyEntity.Add(mynewObject)

那么,保存更改就可以了

在我的例子中,我已经在modelBuilder的上下文中设置了另一个属性作为键。

modelBuilder.Entity<MyTable>().HasKey(t => t.OtherProp);

我必须设置正确的id

 modelBuilder.Entity<MyTable>().HasKey(t => t.Id);

基本上有两种不同的方法来插入记录而不会出现错误:

1)当IDENTITY_INSERT设置为OFF时。主键“ID”不能出现

2)当IDENTITY_INSERT设置为ON时。主键“ID”必须存在

根据下面的例子,同一个表用IDENTITY主键创建:

CREATE TABLE [dbo].[Persons] (    
    ID INT IDENTITY(1,1) PRIMARY KEY,
    LastName VARCHAR(40) NOT NULL,
    FirstName VARCHAR(40)
);

1)在第一个例子中,当IDENTITY_INSERT是OFF时,你可以插入新的记录到表中而不会得到一个错误。主键“ID”不能出现在“INSERT INTO”语句中,一个唯一的ID值将被自动添加:。如果在这种情况下,ID从INSERT中出现,您将得到错误“不能为表中标识列插入显式值…”

SET IDENTITY_INSERT [dbo].[Persons] OFF;
INSERT INTO [dbo].[Persons] (FirstName,LastName)
VALUES ('JANE','DOE'); 
INSERT INTO Persons (FirstName,LastName) 
VALUES ('JOE','BROWN');

表[dbo]的输出。[人员]将是:

ID    LastName   FirstName
1     DOE        Jane
2     BROWN      JOE

2)在第二个例子中,当IDENTITY_INSERT是ON的时候,你可以插入新的记录到表中而不会得到一个错误。只要ID值不存在,主键“ID”必须从“INSERT INTO”语句中出现:如果ID不存在,在这种情况下,你将得到错误“必须为标识列表指定显式值…”

SET IDENTITY_INSERT [dbo].[Persons] ON;
INSERT INTO [dbo].[Persons] (ID,FirstName,LastName)
VALUES (5,'JOHN','WHITE'); 
INSERT INTO [dbo].[Persons] (ID,FirstName,LastName)
VALUES (3,'JACK','BLACK'); 

表[dbo]的输出。[人员]将是:

ID    LastName   FirstName
1     DOE        Jane
2     BROWN      JOE
3     BLACK      JACK
5     WHITE      JOHN

在我的情况下,我插入了比表中定义的更多的字符。

在我的表列用nvarchar(3)定义,我传递了超过3个字符,同样的错误消息来了。

这不是答案,但在某些情况下可能是类似的问题

您正在为OperationId插入值,这是一个标识列。

您可以像这样在表上打开标识插入,以便您可以指定自己的标识值。

SET IDENTITY_INSERT Table1 ON

INSERT INTO Table1
/*Note the column list is REQUIRED here, not optional*/
            (OperationID,
             OpDescription,
             FilterID)
VALUES      (20,
             'Hierachy Update',
             1)

SET IDENTITY_INSERT Table1 OFF