BCP没有复制所有行

时间:2013-12-19 13:32:43

标签: sql sql-server bcp identity-column

我正在使用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行是随机导入的,没有任何错误痕迹。

Data File

我无法弄清楚发生了什么。是否有任何指针可以捕获丢失的行并阻止它?

2 个答案:

答案 0 :(得分:2)

尝试将max_errors设置为0

  

-m max_errors

     

指定语法错误和编译错误的最大数量   在批量复制操作被取消之前可能发生的情况。每一行   bcp无法复制的内容将被忽略并计为一个错误。如果   此选项不包括在内,默认值为10.

答案 1 :(得分:1)

当您拥有自动增量ID时,就会发生这种情况。按照我的想法

  1. 创建一个没有表格ID字段的视图
  2. 在视图中插入数据
  3. 例如

    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字段