2010-12-15 127 views
1

我有以下查詢鏈接服務器,我必須與之交談。SQL:OPENQUERY不返回所有行

選擇 * FROM

OPENQUERY(DWH_LINK, 'SELECT * FROM TABLEA')

它通常會返回大多數的數據,但有一些行?

的linkeds服務器是從Oracle客戶端

這是任何人都遇到了W/OPENQUERY一個問題來了嗎?

+0

有另一種方式來訪問數據的其他鏈接的服務器比使用OPENQUERY – Bill 2010-12-15 21:44:26

回答

0

這似乎與底層提供者功能有關,而其他人也遇到了這種類似的大小/行限制。一種可能的解決方法是實現一個迭代/循環查詢,其中內置了一些過濾器來撤回一定數量的行。有了oracle,我認爲這可能是使用rownum(不太熟悉oracle)。

因此,像

--Not tested sql, just winging it syntax-wise 
SELECT * FROM OPENQUERY(DWH_LINK, 'SELECT * FROM TABLEA where rownum between 0 AND 500') 
SELECT * FROM OPENQUERY(DWH_LINK, 'SELECT * FROM TABLEA where rownum between 500 AND 1000') 
SELECT * FROM OPENQUERY(DWH_LINK, 'SELECT * FROM TABLEA where rownum ...') 

BOL: link 這是受OLE DB提供程序的能力。雖然查詢可能會返回多個結果集,但OPENQUERY只返回第一個結果集。

3

我有完全相同的問題。

根本原因是您已經使用ODBC而不是OLE DB設置了鏈接服務器。

以下是我固定它:

  • 刪除從SQL Server
  • 的「鏈接服務器」文件夾,右鍵單擊並選擇鏈接服務器「新建鏈接服務器......」
  • 鏈接服務器:進入anything..this將是您新的鏈接服務器的名稱
    • 提供商:選擇「Oracle提供的OLE DB」
    • 產品名稱:進入「甲骨文」(沒有雙q備註)
    • 數據源:從您的TNSNAMES.ORA文件輸入別名。就我而言,這是 「ABC.WORLD」(不包括雙引號)
    • 提供字符串:留空
    • 地點:留空
    • 目錄:留空

現在轉到「安全」選項卡,然後單擊上一個單選按鈕「使用此安全上下文:」並輸入用戶名&密碼爲您的連接

這應該是它!

+0

真棒 - 這是我正是問題。我不能相信ODBC驅動程序會出現這樣的錯誤,但是這種情況,現在它已被糾正:) – SqlRyan 2013-09-19 17:18:53

+0

我們也遇到了這個問題,這是決議。爲了增加我們最初的困惑,SELECT *展示的FETCH FIRST行爲在WHERE子句使用7列中的3列時顯示出來......使用其他4列或在沒有WHERE的情況下運行,返回了預期結果。 – 2014-02-21 14:25:31

+0

切換(從ODBC驅動程序的Microsoft OLE DB提供程序)到** Oracle OLE DB **提供程序工作。謝謝。確保您匹配x64 - >(64位Oracle數據訪問組件(ODAC)下載)到SQL服務器。謝謝。 – Finkel 2016-02-03 17:57:46

0

我有使用Oracle 10即時客戶端和ODBC的相同問題。我在連接到Oracle 10gR2數據庫時使用了此客戶端。我在微軟的支持下打開了一張票,他們建議使用Oracle 11即時客戶端。驚喜!卸載10g即時客戶端,安裝11g即時客戶端並重新啓動解決了問題。