当我执行下面的脚本时,我有以下错误。错误是关于什么,如何解决?
Insert table(OperationID,OpDescription,FilterID)
values (20,'Hierachy Update',1)
错误:
服务器:Msg 544,级别16,状态1,线路1 当IDENTITY_INSERT设置为OFF时,无法为表'table'中的标识列插入显式值。
当我执行下面的脚本时,我有以下错误。错误是关于什么,如何解决?
Insert table(OperationID,OpDescription,FilterID)
values (20,'Hierachy Update',1)
错误:
服务器:Msg 544,级别16,状态1,线路1 当IDENTITY_INSERT设置为OFF时,无法为表'table'中的标识列插入显式值。
当前回答
基本上有两种不同的方法来插入记录而不会出现错误:
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
其他回答
在该表的实体中,将DatabaseGenerated属性添加到标识插入设置的列之上:
例子:
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int TaskId { get; set; }
首先转到所需的表名
步骤2 ->右击表名
选择设计
单击列名
步骤5)进入列属性,然后将No设置为Identity Specification
[注意:插入到显式值后,如果你想,你可以恢复到标识规范为true,然后它会再次生成值]
如果你使用SQL server管理studio你可以使用下面的方法
步骤1) 步骤2)
设置该字段的身份增量时,不能在“OperationID”列中插入数据。
不要在该字段中输入值,它将自动设置。
Insert table(OpDescription,FilterID)
values ('Hierachy Update',1)
如果您正在使用liquibase更新SQL Server,则可能试图将记录键插入到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>
最好的解决方案是使用GeneratedValue(strategy =…)注释,即。
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column ...
private int OperationID;
它说,这个列是由数据库使用IDENTITY策略生成的,你不需要关心-数据库会做的。