現象
Microsoft SQL Server 2012 または SQL Server 2014 で OLE DB プロバイダーを使用して、Oracle にリンクされたサーバーからデータを選択するクエリを実行すると、[数値の種類] 列の値がクエリ結果で切り捨てられる場合があります。
原因
この問題が発生するのは、非宣言の精度/小数点以下の Oracle の数値の種類で、SQL Server データ型への1:1 マッピングがクリアされない場合があるためです。 Sql server 2012 SP2 CU2 の前に、SQL Server はこのような値を文字列にマッピングして、精度が低下しないようにします。 ただし、クエリでそのような値の並べ替え順序が必要な場合は、結果が正しく表示されない可能性があります。 SQL Server 2012 SP2 CU2 では、マッピングは numeric (38, 0) に変更され、一部のデータベーススキーマでは、精度/小数点以下の桁数が指定されていない数値を使っていることがあります。 これにより、整数以外の値が必要なときに回帰が生じます。
解決方法
この修正プログラムを適用すると、OLE DB プロバイダーを使用して、精度の高い小数点以下の値が数値として扱われます。 精度が重要であり、値の範囲が十分でない場合は、数値 (38, 10) としてこのような値の処理を開始する新しいトレースフラグ7314を有効にすることができます。
この問題は、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 フィールドを数値型から最初に SQL Server で完全にサポートされるデータ型に変換します。
状態
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。
この資料に記載されているサードパーティ製品は、マイクロソフトと関連のない他社の製品です。 明示的か黙示的かにかかわらず、これらの製品のパフォーマンスや信頼性についてマイクロソフトはいかなる責任も負わないものとします。