由于数据溢出导致转换失败(数字)

时间:2013-12-05 00:16:49

标签: sql sql-server dbf openrowset

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

  

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

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

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

  

插入[table] select * from OPENROWSET('MSDASQL',                                                      'DRIVER = Microsoft Visual FoxPro驱动程序;                                                      SOURCEDB = [文件路径];                                                      SourceType中= DBF”,                                                      '选择 *                                                      来自[file] .dbf)

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

谢谢。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

  2. 请勿导致导致此问题的dbf文件中的数据。

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

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

    祝你好运!