2014-12-04 93 views
0

從SQL Server查詢鏈接Oracle數據庫服務器時遇到問題。我查詢在Oracle中的視圖和視圖包含在WHERE子句中的功能:從Oracle客戶端運行時鏈接服務器到Oracle數據庫產生錯誤結果

WHERE someColumn = someFunction(anotherColumn) 

查詢返回的行數正確。從SQL服務器執行時,返回的結果很多。通過檢查查詢,我發現WHERE子句中的函數沒有得到應用。這是我所能說的,因爲我無法訪問Oracle BOX。我正在使用OLE DB Oracle提供程序。

有什麼可能導致這個問題?

+0

您在鏈接服務器定義中使用OPENQUERY語法嗎?我認爲這是查詢按原樣傳遞給鏈接數據庫的選項(在這種情況下,該函數應該在/由oracle執行時運行)。另一個選項(我忘記了語法)試圖解析SQL,其中該函數可能被忽略。 – davek 2014-12-04 14:54:18

+0

@davek我沒有使用'OPENQUERY',我的查詢看起來像'SELECT COUNT(*)FROM LinkedServer..Scheme.View',但我試圖從'OPENQUERY'發出同樣的查詢,結果如下SELECT * FROM OPENQUERY(LinkedServer,SELECT COUNT(*)FROM View) – Dimt 2014-12-04 14:56:51

+0

想到的唯一一件事就是追蹤實際到達Oracle的內容(例如使用TKPROF),以查看函數是否以某種方式在途中被剝離出來。 – davek 2014-12-04 15:42:37

回答

0

原來,問題是由於Oracle提供商OLE DB的。當我將供應商更改爲時,Microsoft OLE DB Provider for Oracle工作正常。我花了一段時間才發現問題不大,谷歌也不會給出任何提示。

相關問題