设置IDENTITY_INSERT ON无效

44 t-sql sql-server sql-server-2008

我想将一个表Equipment从一个数据库复制MyDBQA到我们的测试数据库MyDB.表中有一个标识列,它是主键(int,not null).

但是我收到了一个错误:

消息8101,级别16,状态1,行2
只有在使用列列表且IDENTITY_INSERT为ON时,才能指定表'MyDB.dbo.Equipment'中标识列的显式值.

我的剧本:

SET IDENTITY_INSERT [MyDB].[dbo].[Equipment] ON
INSERT INTO [MyDB].[dbo].[Equipment]  SELECT * FROM [MyDBQA].[dbo].[Equipment]
SET IDENTITY_INSERT [MyDB].[dbo].[Equipment] OFF
Run Code Online (Sandbox Code Playgroud)

Mic*_*uda 94

消息说,您可能只是错过了列列表

SET IDENTITY_INSERT [MyDB].[dbo].[Equipment] ON

INSERT INTO [MyDB].[dbo].[Equipment]
            (COL1,
             COL2)
SELECT COL1,
       COL2
FROM   [MyDBQA].[dbo].[Equipment]

SET IDENTITY_INSERT [MyDB].[dbo].[Equipment] OFF 
Run Code Online (Sandbox Code Playgroud)


Hei*_*nzi 14

错误消息的相关部分是

...when a column list is used...
Run Code Online (Sandbox Code Playgroud)

您正在使用的是列名列表SELECT *.改为使用列列表:

SET IDENTITY_INSERT [MyDB].[dbo].[Equipment] ON 

INSERT INTO [MyDB].[dbo].[Equipment] (Col1, Col2, ...)
SELECT Col1, Col2, ... FROM [MyDBQA].[dbo].[Equipment] 

SET IDENTITY_INSERT [MyDB].[dbo].[Equipment] OFF 
Run Code Online (Sandbox Code Playgroud)