SQL Server訪問Oracle提示[訊息 9803 資料不適用於型別 "numeric"]問題

qdrzq發表於2016-05-05

伺服器A,安裝的是SQL Server2005,Oracle 10g的客戶端,版本10.2.0.1
伺服器B,裝的是Oracle 11g,版本11.2.0.1
現在是伺服器A上建了連結伺服器,去訪問伺服器B上面的Oracle庫資料
假如使用微軟的驅動Microsoft OLE DB Provider for Oracle(MSDAORA)建連結伺服器,則效能不敢恭維(但語句是可以正常執行的),
因為效能原因,使用Oracle的驅動Oracle Provider for OLE DB(OraOLEDB.Oracle)來建連結伺服器,但隨之問題來了

oracle的T1表,只有一個欄位F1,number(19,4)型別

SQL Server查詢分析器中,無論使用下列哪種語法格式
select * from LINKDB..USER1.T1;
select * from openquery(LINKDB,'SELECT * FROM T1');
都會提示
訊息 9803,級別 16,狀態 1,第 1 行 資料不適用於型別 "numeric"。

網上查詢解決辦法,沒找到適合此情況的有效解決方案(查詢到此錯誤資訊,但對應的解決方法不外乎做型別轉換)

按錯誤提示的字面意思,開始以為F1欄位值有最大值限制,通過反覆測試,發現的規律(不知道算不算規律)並不是值的大小,測試結果如下:
5.0000 可以
9.0000 可以
10.0000 不可以
20.0000 不可以
50.0000 不可以
50.1000 可以
51.0000 可以
100.0000 不可以
110.0000 可以
100.0100 可以
500.0000 不可以
1000.0000 不可以
1200.0000 不可以
1201.0000 可以

規律貌似就是,>=10的數,只要只有一位非零的數,就不行,>=1000的數,只有一位或者前兩位非零,也是不行的
怪哉!

查了一下SQL Server的版本
select @@version
Microsoft SQL Server 2005 - 9.00.1399.06 (Intel X86)   Oct 14 2005 00:33:37   Copyright (c) 1988-2005 Microsoft Corporation  Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)
沒打pack

所以先打上sp4,之後仍然沒解決

再考慮Oracle客戶端版本問題,在伺服器A上面裝了Oracle 11g的客戶端,問題解決!!!

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29512902/viewspace-2094308/,如需轉載,請註明出處,否則將追究法律責任。

相關文章