症狀
當您使用 Microsoft SQL Server 2012 或 SQL Server 2014 中的 OLE DB 提供者執行查詢以從 SQL Server 連結伺服器選取資料時,查詢結果中 NUMBER 類型資料行中的值可能會被截斷。
原因
發生此問題的原因是,具有未宣告精確度/縮放的 Oracle NUMBER 類型可能沒有與 SQL Server 資料類型的明確 1:1 對應。 在 SQL Server 2012 SP2 CU2 之前,SQL Server 會將這類值對應至字串,以確保不會造成精確度損失。 不過,如果查詢需要這類值的排序順序,則可能會導致不正確的結果。 在 SQL Server 2012 SP2 CU2 中,對應已變更為數值 (38, 0) ,以允許表示某些資料庫結構描述使用 NUMBER 而沒有精確度/縮放的大整數索引鍵。 當需要非整數值時,這會導致迴歸。
解決方式
套用此修正程式之後,系統會將精確度/縮放未知的 NUMBER 值視為 OLE DB 提供者的雙精度值。 如果精確度很重要,且值的範圍不夠大,您可以啟用新的追蹤旗標 7314,它開始將這類值視為數值 (38, 10) 。
此問題已先在下列 SQL Server 累積更新中修正。
SQL Server 2014 SP1 的累積更新 1 /zh-tw/help/3067839
2014 年 SQL Server 累積更新 8 /zh-tw/help/3067836
SQL Server 2012 SP2 的累積更新 6 /zh-tw/help/3052468
關於 SQL Server 的累積更新
SQL Server 的每個新累積更新都包含所有 Hotfix 和先前累積更新的所有安全性修正程式。 查看 SQL Server 的最新累積更新:
因應措施
若要解決此問題,請先將 Oracle 欄位從 NUMBER 類型轉換為 SQL Server 完全支援的資料類型。
狀態
Microsoft 已確認<適用於>一節所列的 Microsoft 產品確實有上述問題。
協力廠商資訊免責聲明
本文提及的協力廠商產品是由與 Microsoft 無關的獨立廠商所製造。 Microsoft 不以默示或其他方式,提供與這些產品的效能或可靠性有關的擔保。