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

Sql 如何在不自动递增ID列的情况下插入行,sql,sql-server,Sql,Sql Server,我有一个表,它有一个强制自动递增列。但有时我必须显式地插入值。为此,我将identity设置为on,但它不工作 代码如下: SET IDENTITY_INSERT [menu_code] on INSERT INTO [dbo].[menu_code] VALUES('', '', '', '', '', 1 -- Auto Generated Identity column ,'', '') 错误消息非常清楚地说明了问题的原因: 只有在使用列列表且“标识插入

我有一个表,它有一个强制自动递增列。但有时我必须显式地插入值。为此,我将identity设置为on,但它不工作

代码如下:

SET IDENTITY_INSERT [menu_code] on

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

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


只有在使用列列表且“标识插入”处于启用状态时,才能为表“dbo.menu\u 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
无论如何,我建议你一直这样做——如果你忽略了列的列表(在
INSERT
SELECT
语句中),你就是在给自己设置一个可怕的惊喜。是的,当你创建查询的时候,只需要再输入一次,但这会让你省去无数个小时的麻烦,也不会让你去寻找讨厌的bug。。。。。。只需明确定义要使用的列列表即可

更新:如果要从另一个表中插入这些值,我强烈建议在
插入
选择
中使用列名称的显式列表:

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

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


只有在使用列列表且“标识插入”处于启用状态时,才能为表“dbo.menu\u 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
无论如何,我建议你一直这样做——如果你忽略了列的列表(在
INSERT
SELECT
语句中),你就是在给自己设置一个可怕的惊喜。是的,当你创建查询的时候,只需要再输入一次,但这会让你省去无数个小时的麻烦,也不会让你去寻找讨厌的bug。。。。。。只需明确定义要使用的列列表即可

更新:如果要从另一个表中插入这些值,我强烈建议在
插入
选择
中使用列名称的显式列表:

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

它怎么不起作用?你有错误吗?如果是:有哪些错误?您只是没有在表中获取任何数据吗?只有在使用列列表且identity\u INSERT为ONi时,才能为表“dbo.menu\u code”中的identity列指定显式值。此错误应该发生,因为我将INSERT identity设置为On,但我在INSERT into时直接插入此设置的identity\u INSERT menu\u codeDM.dbo.menu_代码从DM_.dbo.menu_代码中选择*它怎么不工作?你有错误吗?如果是:有哪些错误?您只是没有在表中获取任何数据吗?只有在使用列列表且identity\u INSERT为ONi时,才能为表“dbo.menu\u code”中的identity列指定显式值。此错误应该发生,因为我将INSERT identity设置为On,但我在INSERT into时直接插入此设置的identity\u INSERT menu\u codeDM.dbo.menu\u代码从DM\u luberties.dbo.menu代码中选择*,但我直接插入类似于此的设置标识\u插入菜单\u代码插入DM.dbo.menu代码从DM\u luberties.dbo.menu代码中选择*,但我直接插入类似于此的设置标识\u插入菜单\u代码插入DM.dbo.menu代码选择*DM_.dbo.menu_code@UsmanHussain:no but-必须在
INSERT
命令中明确定义列列表。试试看,会有用的!对于
,选择
,我还建议使用显式列名,而不是仅使用
SELECT*
……亲爱的,我不能提供所有列的完整列表,因为我的应用程序我必须将所有表中的值从一个数据库插入到另一个数据库的表中,我只是对所有列进行循环,并插入一个数据库中的所有数据对于另一个类似于此的插入DM.dbo.menu_代码从DM_.dbo.menu代码中选择*,上面的查询正在looop下工作,其中所有表的数据都将插入到另一个表亲爱的,是否可以不提供所有列的列表而直接插入到DM.dbo.menu\u代码从DM_luberties.dbo.menu\u代码中选择*,但我直接像这样插入设置标识\u插入菜单\u代码插入DM.dbo.menu\u代码从DM_luberties.dbo.menu选择*_code@UsmanHussain:no but-必须在
INSERT
命令中明确定义列列表。试试看,会有用的!对于
,选择
,我还建议使用显式列名,而不是仅使用
SELECT*
……亲爱的,我不能提供所有列的完整列表,因为我的应用程序我必须将所有表中的值从一个数据库插入到另一个数据库的表中,我只是对所有列进行循环,并插入一个数据库中的所有数据对于类似的另一个表,插入DM.dbo.menu_代码从DM_.dbo.menu代码中选择*上述查询正在looop下工作,其中所有表的数据都将插入到另一个表亲爱的,是否可以不提供所有列的列表