【发布时间】: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