我如何将IDENTITY_INSERT设置为On

时间:2012-09-25 06:15:27

标签: sql-server database c#-4.0

我在向数据库表插入值时收到错误。

“当IDENTITY_INSERT设置为OFF时,无法在表'ref_user'中为标识列插入显式值。”

请帮帮我???

4 个答案:

答案 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列 - 它们是具有紧凑的数字表示的神奇值。但你应该将它们视为一个黑盒子。当您为数字指定含义时,往往会出现问题。