首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

SQL Server 鏈接 Oracle 查詢報錯:使用 ROWNUM 替代 TOP 實現分頁

     編輯:程式設計綜合問答

錯誤現象

SQL Server 2008 配置鏈接服務器訪問 Oracle:
MSDAORA 驅動正常,但 Oracle OLE DB 驅動報錯:數據不適用於類型 "numeric"。

原因

  • Oracle 不支持 TOP n 語法。
  • Oracle OLE DB 驅動對 NUMBER 類型映射更嚴格,可能導致精度/標度不匹配。

解決方案:改用 ROWNUM

-- 錯誤寫法
SELECT TOP 10 * FROM ODS2..EDM_BASE.T03_NOACCOUNTJOUR_CTS;

-- 正確寫法 (Oracle 標準分頁)
SELECT * FROM (
    SELECT * FROM ODS2..EDM_BASE.T03_NOACCOUNTJOUR_CTS
) WHERE ROWNUM <= 10;

-- 若需要排序
SELECT * FROM (
    SELECT * FROM ODS2..EDM_BASE.T03_NOACCOUNTJOUR_CTS
    ORDER BY some_column
) WHERE ROWNUM <= 10;

在 SQL Server 中調用

-- 使用 OPENQUERY 將完整 Oracle SQL 推送下執行
SELECT * FROM OPENQUERY(ODS2, '
    SELECT * FROM (
        SELECT * FROM EDM_BASE.T03_NOACCOUNTJOUR_CTS
        ORDER BY create_time DESC
    ) WHERE ROWNUM <= 10
');

優勢

  • OPENQUERY 將過濾/排序下推到 Oracle 執行,網絡傳輸僅返回結果集。
  • 避免驅動層類型轉換錯誤。
  • 性能遠優於四部分命名 (Server..Schema.Table) 查詢。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved