我试图将数据从.dbf文件移动到Server 2008中的表中,并在多个数字列上得到以下错误:
OLE DB提供程序"MSDASQL“用于链接服务器”(Null)返回消息“多步OLE DB操作生成错误。如果可用,请检查每个OLE DB状态值。没有完成任何工作。MSG7341、级别16、状态2、第1行无法从OLE DB提供程序"MSDASQL“获得列"MSDASQL.apryr”的当前行值(Null)。转换失败,因为数据值溢出了提供程序使用的数据类型。
它只发生在数值列上,而不是在每个数字列上。字符数据很好,并且没有任何日期/时间数据可能会出现任何问题。
下面是我使用的代码示例:
插入表select * OPENROWSET('MSDASQL','DRIVER=Microsoft Visual FoxPro驱动程序;SourceDB=filepath;SourceType=DBF',‘从file.dbf中选择*)
因为dbf文件中的数据是客户数据,所以我被告知我不能手动修复文件中的垃圾数据(假设有),所有事情都必须通过SQL代码来完成。我已经在网上搜索过了,还没有找到解决这个问题的办法。我很感谢你的帮助。
谢谢。
发布于 2013-12-05 19:19:59
在不了解更多细节的情况下,情况听起来很简单: dbf文件中的数据与Server表中的数据类型不匹配。如果是这样的话,那么您有两个选择:
在选项1中,可以将限制性数值或日期类型字段修改为varchar或nvarchar字段。然后,您可能希望修改可能假定dbf文件中某些数据类型的任何程序,以适应varchar或nvarchar数据。例如,您可以使用某种尝试捕获语言,在允许程序访问数据之前测试数据的转换。
如果您决定使用选项2,则可以将select查询更改为筛选出不符合Server表的字段要求的数据。
祝好运!
发布于 2013-12-05 05:42:49
检查Server表上的字段类型。也许他们中的一些人无法获取您的DBF的BCD值。
https://stackoverflow.com/questions/20388927
复制相似问题