【问题标题】:ignore bcp right truncation忽略 bcp 右截断
【发布时间】:2020-03-26 09:22:32
【问题描述】:

我有一个包含股票信息的文件,例如股票代码和股票价格。该文件已使用 freebcp 加载到数据库表中。文件中的股价格式为:23.125。数据库表中的股票价格数据类型为[decimal](28, 2)。 freebcp 通过忽略最后一位数字将数据加载到表中没有任何问题:23.12 已加载到记录的表列中。我们现在使用 Microsoft SQL Server 的 bcp 实用程序(版本:11.0)来加载数据。但是我们现在遇到了一个问题:bcp 认为将 23.125 加载到十进制 (28.2) 是一个错误(#@ 第 783 行,第 23 列:字符串数据,右截断 @#)。它拒绝了记录。

我不想修改输入文件,因为文件中有很多列需​​要通过删除列的最后一位来修复。

有什么方法可以构造 BCP 或 Microsoft SQL Server 以消除正确的截断错误?

【问题讨论】:

  • 你在使用 bcp 命令行工具吗?您是否可以创建一个过程或通过 SQL Server Management Studio 进行导入?

标签: sql sql-server sql-server-2005


【解决方案1】:

过去常见的解决方法是将 BCP 转换为辅助/临时表,然后执行 SELECT (columnlist) INTO 基表,并进行必要的转换。另一种选择是Use the OPENROWSET Bulk Rowset Provider,然后您可以根据需要进行投射/转换。

【讨论】:

    【解决方案2】:

    我今天遇到了这个错误,我通过使用 sql server version #15 中的 -m 参数修复了这个问题

    bcp dbo.<table> in <csv file> -S <server> -d <db> -U <user> -P <psw> -m 999999 -q -c -t ,
    

    参考:https://docs.microsoft.com/en-us/sql/tools/bcp-utility?view=sql-server-ver15#m

    注意: -m 选项也不适用于转换 money 或 bigint 数据类型。

    【讨论】:

      猜你喜欢
      • 2021-07-03
      • 2016-05-28
      • 1970-01-01
      • 2015-04-05
      • 2019-04-10
      • 2017-01-14
      • 2012-07-18
      • 2021-08-24
      • 1970-01-01
      相关资源
      最近更新 更多