0

我有一个具有强制自动递增列的表。但有时我必须明确插入值。为此,我将身份设置为打开,但它不起作用

这是代码:

SET IDENTITY_INSERT [menu_code] on

INSERT INTO [dbo].[menu_code]
VALUES('', '', '', '', '',
       1  -- Auto Generated Identity column
        ,'', '')
4

1 回答 1

3

错误消息清楚地说明了问题的原因:

只有在使用列列表并且 IDENTITY_INSERT 为 ON时,才能为表 'dbo.menu_code' 中的标识列指定显式值

您需要明确定义要向其中插入值的列!

SET IDENTITY_INSERT [menu_code] ON

INSERT INTO [dbo].[menu_code] (Col1, Col2, Col3, Col4, Col5, IdentityCol, Col6, Col7)
VALUES('', '', '', '', '',
       1  -- Auto Generated Identity column
        ,'', '')

SET IDENTITY_INSERT [menu_code] OFF

无论如何,我建议始终这样做 - 如果您省略列列表(包括 onINSERTSELECTstatements),那么您将在路上遇到令人讨厌的惊喜。是的,它需要更多的输入 - 一次,当您创建查询时 - 但它会为您节省无数小时的头痛并试图找到令人讨厌的错误......只需明确定义您想要使用的列列表, 每时每刻。

更新:如果您要从另一个表中插入这些值,我强烈INSERT建议您在 和 中使用明确的列名列表SELECT

SET IDENTITY_INSERT [menu_code] ON

INSERT INTO [dbo].[menu_code] (Col1, Col2, Col3, Col4, Col5, IdentityCol, Col6, Col7)
   SELECT Col1, Col2, Col3, Col4, Col5, IdentityCol, Col6, Col7
   FROM DM_LUBRICANTS.dbo.menu_code 

SET IDENTITY_INSERT [menu_code] OFF
于 2013-03-07T06:20:45.287 回答