web-dev-qa-db-ja.com

SQL ServerとiSeries間のリンクサーバーが小数を丸めています

新しいSQL Server 2008データベースをセットアップしたところ、サーバーと、一部のデータを取得するiSeries As400サーバーとの間にリンクがセットアップされました。

私が抱えている問題は、浮動小数点数を切り捨てていることです。これは、多くの時間をドルで処理しているため、苦痛です。

select * FROM openquery(NADS, 'select CMD, 1.23 Type from CREDD')

私たちの古いサーバーでは、これはCMD列と、1.23のTypeと呼ばれる列をすべて返します。新しいサーバーでは、タイプは1.00です

私の知る限り、リンク部分は同じように設定されています。 IBM i Access for Windows ODBCセットアップはほとんど同じですが、バージョン間で不明な点がいくつかあります。

編集:必要に応じて、Microsoftを使用しているプロバイダーについてOLE DB Provider for ODBC Drivers

Edit2:

プロバイダーのオプションは同じです
provider options are the same

リンクサーバーのプロパティ: enter image description here

iSeries Access for Windows ODBCセットアップは同じようです enter image description hereenter image description hereenter image description hereenter image description hereenter image description hereenter image description hereenter image description hereenter image description here

1
AndyD273

理解した!!

どうやら、最新のService Packがインストールされていなかったようです。 64ビットバージョンのサービスパックをインストールする必要があり(32ビットバージョンはインストールに失敗しました)、終了すると10進数が出てきました。

EDIT:誰かが疑問に思っていた場合:
「IBM iAccess for Windows 7.1(07.01.0800)(64bit)」を使用しており、「Microsoft OLE DB Provider for ODBC =ドライバー」をリンクサーバーのSQLドライバーとして。

EDIT 2017:もう一度この問題に遭遇し、サービスパックを再度探す必要があったので、ここにサービスパックのダウンロードページへのリンクがあります。 、それで私がこの問題に再び遭遇する数年で、私はそれがより簡単になるでしょう...

http://www-03.ibm.com/systems/power/software/i/access/windows_sp.html

4
AndyD273

解決策は簡単です。ASSeriesに浮動小数点の値を変換させます。これは、iSeriesプロバイダーによって適用される暗黙の変換がほぼ毎回失敗するためです。したがって、非常に簡単です:

select * FROM openquery(NADS, 'select CMD, cast(1.23 as float) Type from CREDD')

このようにしてすべてが正常に機能します。1.23はSQL Serverでもフロートします。

2
Jupiter