【问题标题】:Conversion Failed Due To Data Overflow (Numeric)数据溢出导致转换失败(数字)
【发布时间】:2013-12-05 00:16:48
【问题描述】:

我正在尝试将数据从 .dbf 文件移动到 SQL Server 2008 中的表中,并且在多个数字列上出现以下错误:

链接服务器“(null)”的 OLE DB 提供程序“MSDASQL”返回消息“多步 OLE DB 操作生成错误。检查每个 OLE DB 状态值(如果可用)。没有完成任何工作。”。 消息 7341,第 16 层,状态 2,第 1 行 无法从链接服务器“(null)”的 OLE DB 提供程序“MSDASQL”获取列“[MSDASQL].apryr”的当前行值。转换失败,因为数据值溢出了提供者使用的数据类型。

它只发生在数字列上,而不是在每个数字列上。字符数据很好,没有日期/时间数据会导致任何问题。

这是我正在使用的代码示例:

插入 [table] select * from OPENROWSET('MSDASQL', 'DRIVER=Microsoft Visual FoxPro 驱动程序; SourceDB=[文件路径]; 源类型=DBF', '选择 * 来自[文件].dbf)

由于 dbf 文件中的数据是客户数据,我被告知无法手动修复文件中的垃圾数据(假设有),一切都必须通过 SQL 代码完成。我在互联网上搜索并没有真正找到解决这个问题的方法。如有任何帮助,我将不胜感激。

谢谢。

【问题讨论】:

    标签: sql sql-server dbf openrowset


    【解决方案1】:

    在不了解更多细节的情况下,情况听起来很简单:dbf 文件中的数据与 SQL Server 表中的数据类型不匹配。如果是这种情况,那么您有两种选择:

    1. 更改 SQL Server 表以容纳 dbf 文件中的数据。

    2. 不要从导致问题的 dbf 文件中导入数据。

    在选项 #1 中,您可以将限制性数字或日期类型字段修改为 varchar 或 nvarchar 字段。然后,您可能希望修改任何可能假定 dbf 文件中的某些数据类型的程序以适应 varchar 或 nvarchar 数据。例如,您可以使用某种 try-catch 语言来测试数据的转换,然后再让程序访问它。

    如果您决定使用选项 #2,您可以更改选择查询以过滤掉不符合 SQL Server 表字段要求的数据。

    祝你好运!

    【讨论】:

    • 看来我将不得不修改 dbf 文件中大多数数字列的属性。我只是不确定如何在不进入并为每个单独文件手动执行的情况下执行此操作。
    • 您可以使用 ALTER TABLE SQL 语句修改 DBF 文件中的字段类型。如果您的 DBF 具有相同的字段名称,这种方式可以极大地改善字段类型的更改。
    【解决方案2】:

    检查您在 SQL Server 表上的字段类型。也许他们中的一些人无法获取您的 DBF 的 BCD 值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-20
      • 2019-06-15
      • 1970-01-01
      • 1970-01-01
      • 2017-05-25
      • 2021-10-16
      相关资源
      最近更新 更多