【问题标题】:Linked Server to Oracle DB produce wrong result链接服务器到 Oracle DB 产生错误结果
【发布时间】:2014-12-04 14:49:43
【问题描述】:

我在从 SQL Server 查询 Linked Oracle DB Server 时遇到问题。我正在查询 Oracle 框上的视图,该视图在 WHERE 子句中包含一个函数:

WHERE    someColumn  =  someFunction(anotherColumn)

从 Oracle 客户端运行时,查询返回正确的行数。当从 SQL 服务器执行时,它会返回很多结果。通过检查查询,我发现未应用 WHERE 子句中的函数。这就是我只能说的,因为我无法访问 Oracle BOX。我正在使用 OLE DB Oracle 提供程序。

什么会导致这个问题?

【问题讨论】:

  • 您是否在链接服务器定义中使用 OPENQUERY 语法?我认为这是将查询按原样传递给链接数据库的选项(在这种情况下,该函数应该在 oracle 中执行它时工作)。另一个选项(我忘记了语法)尝试解析 SQL,其中的函数可能会被忽略。
  • @davek 我没有使用OPENQUERY,我的查询看起来像SELECT COUNT(*) FROM LinkedServer..Scheme.View,但我尝试从OPENQUERY 发出相同的查询,结果与SELECT* FROM OPENQUERY 相同(LinkedServer,从视图中选择 COUNT(*))
  • 唯一想到的另一件事是跟踪 Oracle 中实际到达的内容(例如使用 TKPROF),以查看该函数是否在途中以某种方式被剥离。
  • @davek 感谢 cmets。有兴趣请看我的回答。

标签: sql-server oracle sql-server-2008


【解决方案1】:

原来问题出在Oracle Provider for OLE DB。当我将提供程序更改为 Microsoft OLE DB Provider for Oracle 时,它可以正常工作。我花了一段时间才弄明白,因为这个问题并不常见,而且 Google 不会给出任何提示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-30
    • 1970-01-01
    相关资源
    最近更新 更多