2

我正在尝试将数据从 .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 Driver; SourceDB=[filepath]; SourceType=DBF', 'select * from [file].dbf)

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

谢谢你。

4

2 回答 2

0

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

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

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

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

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

祝你好运!

于 2013-12-05T19:19:59.637 回答
0

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

于 2013-12-05T05:42:49.580 回答