現象
Microsoft SQL Server 2012 または SQL Server 2014 で OLE DB プロバイダを使用して Oracle リンク サーバーからデータを選択するクエリを実行すると、クエリ結果の NUMBER 型列の値が切り捨てられる場合があります。
原因
この問題は、精度/スケールが宣言されていないOracle NUMBER型が、SQL Serverデータ型に対して明確な1:1のマッピングを持っていない場合があるために発生します。 SQL Server 2012 SP2 CU2 より前のバージョンでは、SQL Server はこのような値を文字列にマップして、精度が損なわれないようにしていました。 ただし、クエリでそのような値の並べ替え順序が必要な場合、誤った結果が得られる可能性があります。 SQL Server 2012 SP2 CU2 では、一部のデータベース スキーマが精度/スケールなしで NUMBER を使用している大きな整数キーの表現を可能にするために、マッピングが数値 (38, 0) に変更されています。 これにより、整数値以外の値が必要なときに回帰が発生します。
解決策
この修正プログラムを適用した後、精度/スケールが不明な NUMBER 値は、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 用の新しい累積的な更新プログラムには、以前の累積的な更新プログラムに含まれていたすべての修正プログラムとすべてのセキュリティ修正プログラムが含まれています。 SQL Server の最新の累積的な更新プログラムを確認してください。
- SQL Server 2014 SP1 の最新の累積的な更新プログラム
- SQL Server 2014 の最新の累積的な更新プログラム
- SQL Server 2012 SP2 の最新の累積的な更新プログラム
回避策
この問題を回避するには、まず Oracle フィールドを NUMBER 型から SQL Server で完全にサポートされているデータ型に変換します。
状態
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。
サードパーティの情報に関する免責事項
この資料に記載されているサードパーティ製品は、マイクロソフトと関連のない他社の製品です。 明示的か黙示的かにかかわらず、これらの製品のパフォーマンスや信頼性についてマイクロソフトはいかなる責任も負わないものとします。