当数值超出范围错误10次时,BCP文件未完全加载

时间:2017-09-16 07:42:58

标签: sql-server bcp

我正在尝试将制表符分隔文件导入SQL。 DB中的一个字段是decimal(15,2)。但是我收到的文件可能有一些指数值,如-2.702159776E17,这显然不适合我在DB中的字段。

问题是如果该指数文件的记录超过10条,则BCP不会加载到完整数据中。一旦遇到指数值的第10个实例,它就会跳过文件的其余部分。

我使用以下BCP命令加载数据:

dbname.dbo.tablename in "filelocation" -c -F 2 -b 10000 -h "TABLOCK" -T -S servername

我尝试导入的文件有200,000条记录。但是我们可以清楚地看到它只处理了18,000条记录,其余的都被跳过了。 BCP的输出如下。

Starting copy...
SQLState = 22003, NativeError = 0
Error = [Microsoft][SQL Server Native Client 11.0]Numeric value out of range
SQLState = 22003, NativeError = 0
Error = [Microsoft][SQL Server Native Client 11.0]Numeric value out of range
SQLState = 22003, NativeError = 0
Error = [Microsoft][SQL Server Native Client 11.0]Numeric value out of range
SQLState = 22003, NativeError = 0
Error = [Microsoft][SQL Server Native Client 11.0]Numeric value out of range
SQLState = 22003, NativeError = 0
Error = [Microsoft][SQL Server Native Client 11.0]Numeric value out of range
SQLState = 22003, NativeError = 0
Error = [Microsoft][SQL Server Native Client 11.0]Numeric value out of range
SQLState = 22003, NativeError = 0
Error = [Microsoft][SQL Server Native Client 11.0]Numeric value out of range
SQLState = 22003, NativeError = 0
Error = [Microsoft][SQL Server Native Client 11.0]Numeric value out of range
SQLState = 22003, NativeError = 0
Error = [Microsoft][SQL Server Native Client 11.0]Numeric value out of range
SQLState = 22003, NativeError = 0
Error = [Microsoft][SQL Server Native Client 11.0]Numeric value out of range

18149 rows copied.
Network packet size (bytes): 4096
Clock Time (ms.) Total     : 265    Average : (68486.79 rows per sec.)

1 个答案:

答案 0 :(得分:0)

查看以下BCP option

  

-m max_errors 指定取消bcp操作之前可能发生的最大语法错误数。语法错误意味着   数据转换错误到目标数据类型。 max_errors总计   排除只能在服务器上检测到的任何错误,例如   约束违规。

     

bcp实用程序无法复制的行将被忽略   算作一个错误。如果未包含此选项,则默认为   10。

您可以看到默认值为10个错误。如果要跳过所有错误,请指定此参数并提供非常大的值。

如果要导入所有记录,可以将记录导入到具有FLOAT数据类型而不是DECIMAL(15,2)的临时表中。然后,通过将浮点值转换为十进制值,将数据从登台表复制到您想要数据的表中。