为什么我得到一个错误做插入时,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.

当前回答

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

INSERT INTO TABLE
SELECT * FROM    

不正确。

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

是正确的

其他回答

通过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'中的身份列插入显式值。

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

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

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

INSERT INTO tbl Values(vals)

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

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

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

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

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

INSERT INTO TABLE
SELECT * FROM    

不正确。

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

是正确的