当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.
答案 0 :(得分:655)
按照MSDN
通过SQLSET 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