Sql BCP不复制所有行

Sql BCP不复制所有行,sql,sql-server,bcp,identity-column,Sql,Sql Server,Bcp,Identity Column,我正在使用BCP将行导入SQL server。当我意识到BCP并不是在随机基础上导入所有行时,一切似乎都很好。跳过某些数据(有时为50%)。BCP过程没有返回任何错误。它说成功复制了X行 BCP命令和输出: bcp MyTable IN MyTable_final.dat -f MyTable.Fmt -S <ServerIP> -U <User> -P <Pwd> -F2 表的SQLSERVER架构: CREATE TABLE MyTable ( Type

我正在使用BCP将行导入SQL server。当我意识到BCP并不是在随机基础上导入所有行时,一切似乎都很好。跳过某些数据(有时为50%)。BCP过程没有返回任何错误。它说成功复制了X行

BCP命令和输出:

bcp MyTable IN MyTable_final.dat -f MyTable.Fmt -S <ServerIP> -U <User> -P <Pwd> -F2
表的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行是随机导入的,没有任何错误痕迹


我还没弄清楚到底发生了什么事。是否有任何指针来捕获丢失的行并阻止它?

当您具有自动递增的ID时,就会发生这种情况。所以,遵循我的想法

  • 创建不包含表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
    
    bcp DIM\U Vitals\U final.dat-f DIM\U Vitals.Fmt-S-U-P-F2中的bcp DIM\U Vitals\U视图
    
    这肯定能解决问题


    确保您的视图没有id字段

    尝试将max\u errors设置为0

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


    用记事本++打开文件,检查行终止符是否设置正确。我一直在导入和导出30 gb的数据,但从来没有遇到过这样的问题。我想我发现标识列有问题。我重新创建了没有主键ID的表,瞧,BCP正在正确复制所有行。数据集不包含标识列,但表中有它(ID BigINT,主键)。我需要在格式文件中做什么更改才能使其正常工作?@即使我很困惑,也要回溯。在过去的几个月里,我经常使用它(当然是在另一个数据集上),但这种情况从未发生过。。。创建一个没有ID的视图,它将工作\这是有意义的。我会试一试的。是否有任何方法可以简单地操纵格式文件以忽略标识列或其他内容?只是检查一下…我试过你的解决方案。但是,我看到以下错误
    SQLState=S1002,NativeError=0 Error=[Microsoft][SQL Server Native Client 11.0]无效的描述符索引
    我最终创建了一个没有标识列的格式文件,所有操作都正常。无需创建视图或任何内容。对于那些导入大文件的用户,您希望始终检查可能出现的错误。出现10条警告后,导入过程停止。设置-m 0将忽略该限制。
    bcp DIM_Vitals_view  IN DIM_Vitals_final.dat -f DIM_Vitals.Fmt -S <ServerIP> -U <User> -P <Pwd> -F2