如何使用SQL Server 2008打开和closuresIDENTITY_INSERT?

为什么当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. 

通过SQL按照MSDN

 SET IDENTITY_INSERT sometableWithIdentity ON INSERT 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)

导入:您必须在INSERT语句中编写列

 INSERT INTO TABLE SELECT * FROM 

是不正确的。

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

是正确的

解:

  1. 将IDENTITY_INSERT设置为ON。

  2. 将客户数据插入客户表。

  3. 将IDENTITY_INSERT设置为OFF。

在这里阅读全文。

这可能是当您有一个主键字段,并且您插入一个重复的值,或者您已将INSERT_IDENTITY标志设置为打开

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

设置标识插入值和后续的插入DML命令将由同一个会话运行。

在这里@Beginner分别设置标识插入ON,然后从他的应用程序运行插入。 这就是为什么他得到了下面的错误:

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

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

设置身份插入后,您需要添加命令“go”。 例:

 SET IDENTITY_INSERT sometableWithIdentity ON go INSERT sometableWithIdentity (IdentityColumn, col2, col3, ...) VALUES (AnIdentityValue, col2value, col3value, ...) SET IDENTITY_INSERT sometableWithIdentity OFF go