插入时SQL Server 2008"IDENTITY_INSERT为ON"错误

Ran*_*aul 4 sql sql-server sql-server-2008

我有Locale_Code两个不同的数据库CP和表PP

这是我表的插入脚本

CREATE TABLE [dbo].[LOCALE_CODE](
    [id] [bigint] IDENTITY(1,1) NOT NULL,
[active] [bit] NOT NULL,
[code] [nvarchar](4000) NULL,
[created_at] [datetime] NULL,
[created_by] [nvarchar](4000) NULL,
[display_name] [nvarchar](4000) NULL,
[updated_at] [datetime] NULL,
[updated_by] [nvarchar](4000) NULL,
[read_permission] [nvarchar](4000) NULL,
PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF,      ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
Run Code Online (Sandbox Code Playgroud)

我试图将PP.dbo.LOCALE_CODE中的所有行插入CP.dbo.LOCALE_CODE,如下所示

SET IDENTITY_INSERT CP.dbo.LOCALE_CODE ON

insert into CP.[dbo].[LOCALE_CODE] select * from PP.dbo.LOCALE_CODE  
Run Code Online (Sandbox Code Playgroud)

但我得到低于错误

只有在使用列列表且IDENTITY_INSERT为ON时,才能指定表'CP.dbo.LOCALE_CODE'中标识列的显式值.

我甚至尝试了如下的批量插入

BULK INSERT CP.[dbo].[LOCALE_CODE] from 'C:\locales.csv'
with (fieldterminator = ',', rowterminator = '\n' )
go
Run Code Online (Sandbox Code Playgroud)

但我得到低于错误

当IDENTITY_INSERT设置为ON或复制用户插入NOT FOR REPLICATION标识列时,必须为表'LOCALE_CODE'中的标识列指定显式值.

有人可以帮助修复BULK插件或从PP.Locale_Code直接插入到PP.Locale_Code吗?

Mud*_*san 7

您需要在插入时明确提及目标表中的列名称.将Col1,Col2等替换为CP.[dbo].[LOCALE_CODE]表的列表

SET IDENTITY_INSERT CP.dbo.LOCALE_CODE ON

insert into CP.[dbo].[LOCALE_CODE] (Col1 ,Col2 , Col3) 
select * from PP.dbo.LOCALE_CODE 
Run Code Online (Sandbox Code Playgroud)

您可以在源表的SELECT中使用*PP.dbo.LOCALE_CODE