如何使用SQL Server 2008打开和关闭IDENTITY_INSERT?

时间:2011-08-15 09:37:30

标签: sql sql-server-2008

IDENTITY_INSERT设置为OFF时,为什么我在插入时出错?

如何在SQL Server 2008中正确启用它?是使用SQL Server Management Studio吗?

我已经运行了这个查询:

SET IDENTITY_INSERT Database. dbo. Baskets ON

然后我在控制台中收到消息,命令已成功完成。 但是,当我运行应用程序时,它仍然给出了如下所示的错误:

Cannot insert explicit value for identity column in table 'Baskets' when 
IDENTITY_INSERT is set to OFF.

8 个答案:

答案 0 :(得分:655)

按照MSDN

通过SQL
SET IDENTITY_INSERT sometableWithIdentity ON

INSERT sometableWithIdentity (IdentityColumn, col2, col3, ...)
VALUES (AnIdentityValue, col2value, col3value, ...)

SET IDENTITY_INSERT sometableWithIdentity OFF

完整的错误消息告诉您完全出了什么问题......

  

当IDENTITY_INSERT设置为OFF时,无法在表'sometableWithIdentity'中为identity列插入显式值。

答案 1 :(得分:51)

我遇到了一个问题,即使在设置IDENTITY_INSERT后,它也不允许我插入它。

问题是我没有指定列名,并且由于某种原因它不喜欢它。

INSERT INTO tbl Values(vals)

所以基本上完​​全INSERT INTO tbl(cols)值(vals)

答案 2 :(得分:31)

导入: 您必须在INSERT语句

中编写列
INSERT INTO TABLE
SELECT * FROM    

不正确。

Insert into Table(Field1,...)
Select (Field1,...) from TABLE

是否正确

答案 3 :(得分:3)

我知道这是一个较旧的主题,但我只是碰到了这一点。如果用户尝试在其他会话设置IDENTITY_INSERT ON之后在Identity列上运行插入,则他必然会得到上述错误。

设置Identity Insert值和后续的Insert DML命令将由同一会话运行。

@Beginner在这里单独设置Identity Insert ON,然后从他的应用程序运行插入。这就是他得到以下错误的原因:

Cannot insert explicit value for identity column in table 'Baskets' when 
IDENTITY_INSERT is set to OFF.

答案 4 :(得分:0)

当你有一个PRIMARY KEY字段并且你正在插入一个重复的值或你将INSERT_IDENTITY标志设置为on

时,这很有可能

答案 5 :(得分:0)

放置SET IDENTITY_INSERT数据库看起来很有必要。 DBO。篮子ON;在每个SQL INSERT发送批处理之前。 /你可以发送几个INSERT ... VALUES ..命令以一个SET IDENTITY_INSERT ... ON开始;一开始的字符串。只是不要在/之间放置任何批次分隔符 我不知道为什么SET IDENTITY_INSERT ... ON在发送块之后停止工作(例如c#中的.ExecuteNonQuery())...我必须把SET IDENTITY_INSERT ... ON;再次在下一个SQL命令字符串的开头。

答案 6 :(得分:0)

另一种选择是您拥有“类型”或“状态”之类的表,例如OrderStatus,您一直希望控制Id值,创建Id(主键)列而不将其作为Identity列,第一名。

答案 7 :(得分:-2)

设置标识插入后,需要添加命令“go”。 例如:

SET IDENTITY_INSERT sometableWithIdentity ON
go

INSERT sometableWithIdentity (IdentityColumn, col2, col3, ...)
VALUES (AnIdentityValue, col2value, col3value, ...)

SET IDENTITY_INSERT sometableWithIdentity OFF
go