我正在使用BCP将行导入SQL服务器。当我意识到BCP没有随机导入所有行时,所有似乎都工作正常。跳过一些数据(有时是50%)。 BCP过程不会返回任何错误。它说成功复制了X行。
BCP命令和输出:
bcp MyTable IN MyTable_final.dat -f MyTable.Fmt -S <ServerIP> -U <User> -P <Pwd> -F2
输出:
Starting copy...
6 rows copied.
Network packet size (bytes): 4096
Clock Time (ms.) Total : 63 Average : (95.24 rows per sec.)
表的SQLSERVER模式:
CREATE TABLE MyTable (
Type varchar(255) default NULL,
Date varchar(255) default NULL,
ID varchar(255) default NULL,
VID varchar(255) default NULL,
VName varchar(255) default NULL,
LDate varchar(225) default NULL,
id BIGINT IDENTITY(1,1) NOT NULL,
PRIMARY KEY (id) ,
CONSTRAINT d_v UNIQUE (VID, VName)
) ;
正在使用的BCP格式文件:
11.0
7
1 SQLCHAR 0 255 "|" 1 Type SQL_Latin1_General_CP1_CI_AS
2 SQLCHAR 0 255 "|" 2 Date SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 255 "|" 3 ID SQL_Latin1_General_CP1_CI_AS
4 SQLCHAR 0 255 "|" 4 VID SQL_Latin1_General_CP1_CI_AS
5 SQLCHAR 0 255 "|" 5 VName SQL_Latin1_General_CP1_CI_AS
6 SQLCHAR 0 225 "|" 6 LDate SQL_Latin1_General_CP1_CI_AS
7 SQLCHAR 0 21 "\r\n" 7 id ""
实际数据集:您可以看到文件中当前有13行。但是,在我的情况下,只有6行是随机导入的,没有任何错误痕迹。
我无法弄清楚发生了什么。是否有任何指针可以捕获丢失的行并阻止它?
答案 0 :(得分:2)
尝试将max_errors设置为0
指定语法错误和编译错误的最大数量 在批量复制操作被取消之前可能发生的情况。每一行 bcp无法复制的内容将被忽略并计为一个错误。如果 此选项不包括在内,默认值为10.
答案 1 :(得分:1)
当您拥有自动增量ID时,就会发生这种情况。按照我的想法
例如
CREATE TABLE DIM_Vitals (
QueryType varchar(255) default NULL,
QueryDate varchar(255) default NULL,
APUID varchar(255) default NULL,
VitalID varchar(255) default NULL,
VitalName varchar(255) default NULL,
LoadDate varchar(225) default NULL,
id BIGINT IDENTITY(1,1) NOT NULL,
PRIMARY KEY (id) ,
CONSTRAINT dim_v UNIQUE (VitalID, VitalName)
) ;
为上表创建一个视图
create view DIM_Vitals_view
as
select
QueryType,
QueryDate,
APUID,
VitalID,
VitalName,
LoadDate
from DIM_Vitals
现在将数据插入视图[DIM_Vitals_view - 视图名称]
bcp DIM_Vitals_view IN DIM_Vitals_final.dat -f DIM_Vitals.Fmt -S <ServerIP> -U <User> -P <Pwd> -F2
确定它会解决问题
确保您的观点没有ID字段