当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
将工作