【问题标题】:BCP File not loaded completely when Numeric value out of range error occurs for 10 times当数值超出范围错误发生 10 次时,BCP 文件未完全加载
【发布时间】:2017-09-16 07:42:58
【问题描述】:

我正在尝试将制表符分隔文件导入 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.)

【问题讨论】:

    标签: sql-server bcp


    【解决方案1】:

    查看以下BCP option

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-31
      • 1970-01-01
      • 2022-11-26
      • 1970-01-01
      相关资源
      最近更新 更多