我有一个有强制自动增量列的表。但有些时候我必须明确地插入值。为此,我将身份设置为on,但它不起作用
以下是代码:
SET IDENTITY_INSERT [menu_code] on
INSERT INTO [dbo].[menu_code]
VALUES('', '', '', '', '',
1 -- Auto Generated Identity column
,'', '')
答案 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
无论如何,我建议你一直这样做 - 如果你省略了列的列表(INSERT
和SELECT
陈述),你就会在路上遇到令人讨厌的惊喜。是的,这是一个更多的打字 - 一次,当你创建查询 - 但它会省去你无数小时的头痛,并试图找到讨厌的错误......只需定义列表您希望始终使用明确的列。
更新:如果您要从其他表中插入这些值,我会 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