Sql server 2008 r2 标识\u在不工作时插入-SQL Server 2008 R2

Sql server 2008 r2 标识\u在不工作时插入-SQL Server 2008 R2,sql-server-2008-r2,identity,identity-column,Sql Server 2008 R2,Identity,Identity Column,我的查询有问题。 基本上,我要做的是清空一个表,并将同一个表中的记录复制到另一个数据库中 我确实使用了SET IDENTITY\u INSERT代码来确保在执行插入之前,IDENTITY列已关闭。但不知何故,它仍然向我抛出错误信息: Msg 8101,第16级,状态1,第3行 只有在使用列列表且启用identity_INSERT时,才能为表“dbo.UI_PAGE”中的identity列指定显式值 以下是我的疑问: DELETE FROM [DB1].[dbo].[MY_TABLE] SET

我的查询有问题。 基本上,我要做的是清空一个表,并将同一个表中的记录复制到另一个数据库中

我确实使用了
SET IDENTITY\u INSERT
代码来确保在执行插入之前,IDENTITY列已关闭。但不知何故,它仍然向我抛出错误信息:

Msg 8101,第16级,状态1,第3行
只有在使用列列表且启用identity_INSERT时,才能为表“dbo.UI_PAGE”中的identity列指定显式值

以下是我的疑问:

DELETE FROM [DB1].[dbo].[MY_TABLE] 

SET IDENTITY_INSERT [DB1].[dbo].[MY_TABLE] ON

INSERT INTO [DB1].[dbo].[MY_TABLE]
   SELECT *
   FROM  [DB2].[dbo].[MY_TABLE]

SET  IDENTITY_INSERT [DB1].[dbo].[MY_TABLE] OFF
有人能告诉我哪一步我做错了吗


非常感谢

在使用INSERT INTO时,在启用IDENTITY INSERT的情况下插入时,必须指定所有列名

INSERT INTO  [DB1].[dbo].[MY_TABLE](TabelID,Field1,Field2,Field3...)
SELECT * FROM  [DB2].[dbo].[MY_TABLE]

如果您不知道ssms中有一个漂亮的小把戏。如果选择一个表并展开其节点,则在Columns节点上按ctrl-c复制,这将在剪贴板文本缓冲区中放置一个以逗号分隔的字段名列表。

除了Ross Bush给出的第一个答案, 如果您的表有许多列,则可以使用此命令获取这些列的名称

SELECT column_name + ','
FROM   information_schema.columns 
WHERE  table_name = 'TableName'
for xml path('')

(删除最后一个逗号(“,”)后,只需复制过去的列名。

我甚至建议您在所有
INSERT
SELECT
语句中始终明确列出列。这是一个有点打字前,但它使许多避免,难以发现的问题和错误!