IDENTITY_INSERT ON 不起作用 - SQL Server 2008 R2

Smi*_*ley 2 identity identity-column sql-server-2008-r2

我的查询遇到问题。基本上,我想做的是清空一个表,然后从另一个数据库中的同一个表中复制记录。

我确实使用SET IDENTITY_INSERT代码来确保在执行插入之前关闭标识列。但不知何故,它仍然向我抛出错误消息:

消息 8101,级别 16,状态 1,第 3 行
仅当使用列列表且 IDENTITY_INSERT 为 ON 时,才能指定表“dbo.UI_PAGE”中标识列的显式值。

以下是我的查询:

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
Run Code Online (Sandbox Code Playgroud)

有人能指出我哪一步做错了吗?

多谢!

Ros*_*ush 5

使用 IDENTITY INSERT ON 插入时必须指定所有列名 使用 INSERT INTO 时

INSERT INTO  [DB1].[dbo].[MY_TABLE](TabelID,Field1,Field2,Field3...)
SELECT * FROM  [DB2].[dbo].[MY_TABLE]
Run Code Online (Sandbox Code Playgroud)

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

  • 我什至建议**始终**在所有“INSERT”和“SELECT”语句中显式列出列。预先输入的内容较多,但会避免很多难以发现的问题和错误! (2认同)