我有一个具有强制自动递增列的表。但有时我必须明确插入值。为此,我将身份设置为打开,但它不起作用
这是代码:
SET IDENTITY_INSERT [menu_code] on
INSERT INTO [dbo].[menu_code]
VALUES('', '', '', '', '',
1 -- Auto Generated Identity column
,'', '')
我有一个具有强制自动递增列的表。但有时我必须明确插入值。为此,我将身份设置为打开,但它不起作用
这是代码:
SET IDENTITY_INSERT [menu_code] on
INSERT INTO [dbo].[menu_code]
VALUES('', '', '', '', '',
1 -- Auto Generated Identity column
,'', '')
错误消息清楚地说明了问题的原因:
只有在使用列列表并且 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
无论如何,我建议始终这样做 - 如果您省略列列表(包括 onINSERT
和SELECT
statements),那么您将在路上遇到令人讨厌的惊喜。是的,它需要更多的输入 - 一次,当您创建查询时 - 但它会为您节省无数小时的头痛并试图找到令人讨厌的错误......只需明确定义您想要使用的列列表, 每时每刻。
更新:如果您要从另一个表中插入这些值,我强烈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