oracle11g – 使用四个部件名称作为SQL Server链接服务器访问Oracle DB时,列定义错误无效

oracle11g – 使用四个部件名称作为SQL Server链接服务器访问Oracle DB时,列定义错误无效,第1张

概述我在SQL Server 2008 R2中设置了一个链接服务器,以便访问Oracle 11g数据库. MSDASQL提供程序用于通过Oracle Instant Client ODBC驱动程序连接到链接服务器.使用带有以下语法的OPENQUERY时连接效果很好: SELECT * FROM OPENQUERY(LINKED_SERVER, 'SELECT * FROM SCHEMA.TABLE' 我在sql Server 2008 R2中设置了一个链接服务器,以便访问Oracle 11g数据库. MSDAsql提供程序用于通过Oracle Instant ClIEnt ODBC驱动程序连接到链接服务器.使用带有以下语法的OPENquery时连接效果很好:

SELECT * FROM OPENquery(linkED_SERVER,'SELECT * FROM SCHEMA.table')@H_419_12@  

但是,我尝试使用以下语法使用四部分名称:

SELECT * FROM linkED_SERVER..SCHEMA.table@H_419_12@  

我收到以下错误

Msg 7318,Level 16,State 1,line 1
The olE DB provIDer “MSDAsql” for Linked Server “linkED_SERVER” returned an invalID column deFinition for table “”SCHEMA”.”table””.

有没有人有任何洞察我的导致四部分名称查询失败,而OPENquery一个工作没有任何问题?

解决方法 正确的路径是使用OPENquery函数,因为您的链接服务器是Oracle:四个名称语法适用于MSsql服务器,主要是因为它们了解T-sql.

使用非常简单的查询,4部分名称可能会意外地工作,但如果您处于真实场景中则不常见.在您的情况下,SELECT *返回所有列,在您的情况下,其中一个列定义与sql Server不兼容.尝试另一个表或尝试选择一个简单的列(例如CHAR或NUMBER),也许它可以正常工作.

无论如何,使用分布式查询有时会很棘手.数据库本身在执​​行命令之前会执行some optimizations,因此数据库必须知道它可以做什么以及不能做什么.如果数据库认为链接服务器是MSsql,则需要采取一些可能不适用于Oracle的 *** 作.

当使用与MSsql不同的链接数据库的四部分名称语法时,您也会遇到其他问题,例如使用数据库内置函数(即to_date()Oracle函数将无法工作,因为MSsql会想要使用自己的convert()函数,等等).

同样,如果链接服务器不是MSsql,那么正确的选择是使用OPENquery并向其传递一个查询,该查询使用对链接服务器sql方言有效的语法.

总结

以上是内存溢出为你收集整理的oracle11g – 使用四个部件名称作为SQL Server链接服务器访问Oracle DB时,列定义错误无效全部内容,希望文章能够帮你解决oracle11g – 使用四个部件名称作为SQL Server链接服务器访问Oracle DB时,列定义错误无效所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1157437.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存