为什么我得到一个错误做插入时,IDENTITY_INSERT设置为关闭?

如何在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.

通过SQL作为每个MSDN

SET IDENTITY_INSERT sometableWithIdentity ON

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

SET IDENTITY_INSERT sometableWithIdentity OFF

完整的错误消息会告诉你到底哪里出错了……

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


我有一个问题,它不允许我插入它,即使在设置IDENTITY_INSERT ON。

问题是我没有指定列名,出于某种原因,它不喜欢这样做。

INSERT INTO tbl Values(vals)

基本上就是INSERT INTO tbl(cols) Values(vals)


当您有一个PRIMARY KEY字段,并且您正在插入一个重复的值,或者您将INSERT_IDENTITY标志设置为on时,很可能会出现这种情况


进口: 必须在INSERT语句中写入列

INSERT INTO TABLE
SELECT * FROM    

不正确。

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

是正确的


看起来有必要设置SET IDENTITY_INSERT database .dbo.篮;在每个SQL INSERT发送批处理之前。

你可以发送几个INSERT…值……以SET IDENTITY_INSERT开始的命令…上;开头的字符串。只是中间不要放任何批分隔符。

我不知道为什么SET IDENTITY_INSERT…ON在发送块之后停止工作(例如:c#中的. executenonquery())。我不得不把SET IDENTITY_INSERT…上;再次在SQL命令字符串的开始。


我知道这是一个较老的线程,但我只是碰到了这个。如果用户试图在其他会话Set IDENTITY_INSERT on之后对Identity列运行插入,那么他一定会得到上述错误。

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

这里@初学者单独设置身份插入,然后从他的应用程序中运行插入。这就是为什么他得到了下面的错误:

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

另一种选择是,当你有像“类型”或“状态”这样的表时,例如,OrderStatus,你总是想控制Id值,创建Id(主键)列而不是Identity列是第一个位置。