如何在不自动递增ID列的情况下插入行

时间:2013-03-07 06:08:24

标签: sql sql-server

我有一个有强制自动增量列的表。但有些时候我必须明确地插入值。为此,我将身份设置为on,但它不起作用

以下是代码:

SET IDENTITY_INSERT [menu_code] on

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

1 个答案:

答案 0 :(得分:3)

错误信息清楚地表明问题的原因:

  

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

您需要明确定义您尝试将值插入的列!

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

无论如何,我建议你一直这样做 - 如果你省略了列的列表(INSERTSELECT陈述),你就会在路上遇到令人讨厌的惊喜。是的,这是一个更多的打字 - 一次,当你创建查询 - 但它会省去你无数小时的头痛,并试图找到讨厌的错误......只需定义列表您希望始终使用明确的列。

更新:如果您要从其他表中插入这些值,我会 HIGHLY 建议同时使用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