我在向数据库表插入值时收到错误。
“当IDENTITY_INSERT设置为OFF时,无法在表'ref_user'中为标识列插入显式值。”
请帮帮我???
答案 0 :(得分:3)
SET IDENTITY_INSERT tblename on
答案 1 :(得分:3)
您收到此错误的原因是您尝试在自动增量字段用作主键的表中插入。
在您的命令中,您可以在插入后设置Identity_Insert On
然后设置Off
。类似的东西:
new SqlCommand("SET IDENTITY_INSERT ON;
Insert into yourtable .....;
SET IDENTITY_INSERT OFF;", yourConnection);
答案 2 :(得分:0)
试
语法:
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;
答案 3 :(得分:0)
如果您不熟悉此错误,则更有可能是您尝试为不应该提供的列提供值。
假设你有一张桌子:
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
列 - 它们是具有紧凑的数字表示的神奇值。但你应该将它们视为一个黑盒子。当您为数字指定含义时,往往会出现问题。