所以我建立了从SQL Server 2008 Express Edition到Oracle数据库的连接。 当我查询基于varchar的值时,它很好,但对于任何数值,它会抛出像这样的错误。
Msg 9803, Level 16, State 1, Line 1
Invalid data for type "numeric".
我该如何解决这个问题?
答案 0 :(得分:3)
我自己也遇到了这个问题。您的错误是由链接未正确处理的数字字段引起的。最简单的解决方法是转换为OPENQUERY中的varchar,并转换回另一侧的数字
SELECT CONVERT(INT, YourField ) AS YourField
FROM OPENQUERY (LINKEDSERVER,
'SELECT TO_CHAR(YourField ) AS YourField FROM RemoteTable');
答案 1 :(得分:1)
答案 2 :(得分:1)
一个人说他们在Oracle的Metalink DocID 369814.1中找到了答案。他们说解决方案是安装最低版本为10.2.0.2.20的Oracle OLEDB驱动程序。 他们安装了Oracle客户端10.2.0.3,然后应用了适用的补丁(在Metalink DocID 369814.1中有描述)。
我在http://forums.oracle.com/forums/thread.jspa?threadID=337842&start=15&tstart=135找到了这篇文章。
这似乎是比转换为char数据类型,然后转换回numeric数据类型更好的解决方案。我认为这些转换会让您失去性能。
答案 3 :(得分:1)
我们在其中一个环境中遇到了同样的问题,问题是我们错误地设置了链接服务器。
我们将其更改为Microsoft OLD DB Provider for Oracle并解决了问题。希望这会有所帮助。