当IDENTITY_INSERT设置为OFF时,不能在表“表”中插入标识列的显式值

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

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

错误:

服务器:消息544,级别16,状态1,行1

当IDENTITY_INSERT设置为OFF时,不能在表“表”中插入标识列的显式值。

您正在插入标识列的 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 

对将IDENTITY_INSERT设置为ON非常谨慎。 除非数据库处于维护模式并且设置为单个用户,否则这是一个糟糕的做法。 这不仅会影响您的插入,还会影响其他任何尝试访问表的人。

你为什么试图给身份领域的价值?

不要把值赋给OperationID,因为它会自动生成。 尝试这个:

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

简单如果你在SQL服务器上得到这个错误然后运行这个查询 –

 SET IDENTITY_INSERT tableName ON 

例如,如果表名是学生,则查询看起来像这样SET IDENTITY_INSERT student ON

如果在Web应用程序或使用entity framework时出现此错误,请首先在SQL Server上运行此查询,然后更新您的实体模型( .edmx file并构build您的项目,并解决此错误

在该表的实体中,在设置了标识插入的列的上方添加DatabaseGenerated属性:

例:

 [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int TaskId { get; set; } 

如果您使用liquibase更新您的SQL Server,则可能尝试将logging键插入到autoIncrement字段中。 通过从插入删除列,您的脚本应该运行。

 <changeSet id="CREATE_GROUP_TABLE" > <createTable tableName="GROUP_D"> <column name="GROUP_ID" type="INTEGER" autoIncrement="true"> <constraints primaryKey="true"/> </column> </createTable> </changeSet> <changeSet id="INSERT_UNKNOWN_GROUP" > <insert tableName="GROUP_D"> <column name="GROUP_ID" valueNumeric="-1"/> ... </insert> </changeSet> 

在查询中有前面提到的OperationId,它不应该在那里,因为它是自动增加的

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

所以你的查询将是

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

那么我解决了我的很容易,检查你的主键是与你的类相同的名称,唯一的区别是你的主键有'身份证'追加到它或指定[钥匙]主键不涉及类被命名。

用这个。

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

我不知道“插入表”的用途是什么,但如果你只是想插入一些值,请尝试:

 Insert Into [tablename] (OpDescription,FilterID) values ('Hierachy Update',1); 

我有同样的错误信息出来,但我认为这应该工作。 只要ID是主键,ID就会自动增加。

你可以简单地使用这个语句,例如,如果你的表名是School 。 在插入前确保identity_insert设置为ON ,插入查询后closuresidentity_insert

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

如果您使用Oracle SQL Developer进行连接,请记住添加/ sqldev:stmt /

/ sqldev:stmt / set identity_insert TABLE on;

如果您使用Interface并以通用方式实现savechanges方法,则使用非types化的DBContext或DBSet会引发此问题

如果这是你的情况,我build议强烈键入例如DBContex

 MyDBContext.MyEntity.Add(mynewObject) 

那么.Savechanges将工作