徵狀
當您在 Microsoft SQL Server 2012 或 SQL Server 2014 中使用 OLE DB 提供者從 Oracle 連結伺服器中執行查詢來選取資料時,[數數值型別] 欄中的值可能會在查詢結果中被截斷。
原因
發生這個問題的原因是,使用非宣告的精度/小數位數的 Oracle 數位類型,可能無法將 clear 1:1 對應至 SQL Server 資料類型。 在 SQL Server 2012 SP2 CU2 之前,SQL Server 會將此類值對應至字串,以確保沒有精度損失。 不過,如果查詢所需的排序次序在這些值上,這可能會導致不正確的結果。 在 SQL Server 2012 SP2 CU2 中,mapping 會變更為 numeric (38,0),以允許使用不含精確度/小數位的大整數鍵來表示。 這會在需要非整數值時產生回歸。
解決方案
套用此修正程式後,具有未知精確度/小數位數的數位值會以 OLE DB 提供者的格式被視為雙精度值。 如果精確度很重要,且值的範圍不夠大,您可以啟用新的 Trace 標誌7314來開始將這些值視為 numeric (38,10)。
此問題最初是在 SQL Server 的後續累積更新中修正。
SQL Server 2014 SP1 的累積更新1 /en-us/help/3067839
SQL Server 2014 累計更新8 /en-us/help/3067836
SQL Server 2012 SP2 累積更新6 /en-us/help/3052468
每個新的 SQL Server 累計更新都包含所有的修正程式,以及前一個累積更新中所包含的所有安全性修正程式。 查看 SQL Server 的最新累計更新:
因應措施
若要解決此問題,請將 Oracle 欄位從 NUMBER 類型轉換為 SQL Server 首先完全支援的資料類型。
狀態
Microsoft 已確認<適用於>一節所列的 Microsoft 產品確實有上述問題。
本文提及的協力廠商產品是由與 Microsoft 無關的獨立廠商所製造。 Microsoft 不以默示或其他方式,提供與這些產品的效能或可靠性有關的擔保。