将值插入数据库表时出现错误。
“当 IDENTITY_INSERT 设置为 OFF 时,无法在表 'ref_user' 中插入标识列的显式值。”
请帮帮我???
将值插入数据库表时出现错误。
“当 IDENTITY_INSERT 设置为 OFF 时,无法在表 'ref_user' 中插入标识列的显式值。”
请帮帮我???
SET IDENTITY_INSERT tblename on
您收到此错误的原因是您试图在表中插入自动增量字段用作主 ke。
在您的命令中,您可以在插入之后设置Identity_Insert On
and then 。Off
就像是:
new SqlCommand("SET IDENTITY_INSERT ON;
Insert into yourtable .....;
SET IDENTITY_INSERT OFF;", yourConnection);
尝试
句法:
SET IDENTITY_INSERT [ database. [ owner. ] ] { table } { ON | OFF }
前任:
SET IDENTITY_INSERT dbo.your_table ON;
编辑:
请注意,当您在..上指定身份插入时,您必须在插入语句中明确指定列列表
示例:
create table test_identity (id int identity , val int)
SET IDENTITY_INSERT dbo.test_identity On;
insert into test_identity (id,val) select 1,2
SET IDENTITY_INSERT dbo.test_identity OFF;
如果您不熟悉此错误,则更有可能您正在尝试为不应提供的列提供值。
假设你有一张桌子:
CREATE TABLE T (
ID int IDENTITY(1,1) not null,
Col1 varchar(10) not null
);
如果您尝试这样的插入:
INSERT INTO T(ID,Col1) values (1,'abc');
你会得到你发布的错误。通常,您真正想要做的是:
INSERT INTO T(Col1) values ('abc');
(并且可能在之后检索插入的值SELECT SCOPE_IDENTITY()
)。
但是对于你提出的问题,你会这样做:
SET IDENTITY_INSERT T ON;
INSERT INTO T(ID,Col1) values (1,'abc');
SET IDENTITY_INSERT T OFF;
通常,您不应该关心为列分配了哪些值IDENTITY
——它们是恰好具有紧凑的数字表示的神奇值。但是您应该将它们视为黑匣子。当您为数字分配含义时,往往会出现问题。