我在两个不同的数据库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
我是否尝试将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
但是我的误差低于
表格中的标识列的显式值" CP.dbo.LOCALE_CODE'只能在使用列列表且IDENTITY_INSERT为ON时指定。
我甚至尝试了批量插入,如下所示
BULK INSERT CP.[dbo].[LOCALE_CODE] from 'C:\locales.csv'
with (fieldterminator = ',', rowterminator = '\n' )
go
但是我的误差低于
必须为表格中的标识列指定显式值' LOCALE_CODE'当IDENTITY_INSERT设置为ON或复制用户插入NOT FOR REPLICATION标识列时。
有人可以帮助修复BULK插件或从PP.Locale_Code直接插入PP.Locale_Code吗?
答案 0 :(得分: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
您可以在源表PP.dbo.LOCALE_CODE
答案 1 :(得分:3)
在没有错误的情况下,INSERT记录基本上有两种不同的方法:
1)当IDENTITY_INSERT设置为OFF时。 PRIMARY KEY " ID"绝不能存在
2)当IDENTITY_INSERT设置为ON时。 PRIMARY KEY " ID"必须存在
根据使用IDENTITY PRIMARY KEY创建的同一个表中的以下示例:
CREATE TABLE [dbo].[Persons] (
ID INT IDENTITY(1,1) PRIMARY KEY,
LastName VARCHAR(40) NOT NULL,
FirstName VARCHAR(40)
);
1)在第一个示例中,当IDENTITY_INSERT为OFF时,您可以在表中插入新记录而不会出现错误。 PRIMARY KEY " ID"绝不能出现来自" INSERT INTO"语句将自动添加唯一ID值。如果在这种情况下INSERT中存在ID,您将收到错误"无法为表中的标识列插入显式值..."
SET IDENTITY_INSERT [dbo].[Persons] OFF;
INSERT INTO [dbo].[Persons] (FirstName,LastName)
VALUES ('JANE','DOE');
INSERT INTO Persons (FirstName,LastName)
VALUES ('JOE','BROWN');
表[dbo]的输出。[人员]将是:
ID LastName FirstName
1 DOE Jane
2 BROWN JOE
2)在第二个示例中,您可以在IDENTITY_INSERT为ON时将新记录插入表中而不会出现错误。 PRIMARY KEY " ID"必须出现来自" INSERT INTO"语句只要ID值不存在:如果在这种情况下INSERT中不存在ID,则会得到错误"必须为标识列表指定显式值..."
SET IDENTITY_INSERT [dbo].[Persons] ON;
INSERT INTO [dbo].[Persons] (ID,FirstName,LastName)
VALUES (5,'JOHN','WHITE');
INSERT INTO [dbo].[Persons] (ID,FirstName,LastName)
VALUES (3,'JACK','BLACK');
表[dbo]的输出。[人员]将是:
ID LastName FirstName
1 DOE Jane
2 BROWN JOE
3 BLACK JACK
5 WHITE JOHN