Troncamento dei decimali da un Linked Server iSeries a SQL Server

Recentemente ho avuto la necessità di prelevare dati da un database DB2 su piattaforma iSeries per migrarli su un database SQL Server. Dopo aver creato il Linked Server attraverso il driver ODBC, ho iniziato il trasferimento con istruzioni INSERT e OPENQUERY. Tutto sembrava funzionare bene, ma ad un’analisi più attenta mi sono accorto che qualcosa non andava.
Tutti i valori decimali letti da DB2 venivano troncati. Ecco un semplice test per verificare l’anomalia:

SELECT * FROM OPENQUERY(AS400, 'SELECT 1.23 AS VALUE FROM INFORMATION_SCHEMA.TABLES FETCH FIRST 1 ROW ONLY')
GO

VALUE
---------------------------------------
1.00

(Righe interessate: 1)

Si tratta di un’anomalia del software IBM iAccess per Windows. Il problema si risolve installando l’ultima service pack del prodotto, reperibile qui:
http://www-03.ibm.com/systems/power/software/i/access/windows_sp.html
Attenzione: è necessario installare alcuni aggiornamenti di Microsoft Visual C++ 2005 Redistributable prima di procedere agli aggiornamenti IBM. Trovate il software qui:
http://www.microsoft.com/download/en/details.aspx?id=26347
Se il vostro sistema operativo è a 64 bit, scaricate e installate sia il runtime a 32 bit che quello a 64 bit, poiché iAccess contiene sia componenti a 32 che a 64 bit ed entrambi i runtime devono essere aggiornati.
Per quanto riguarda la service pack di IBM, invece, scaricate solo la versione specifica per l’architettura del vostro sistema (32 o 64 bit).
Fonte: Stack Exchange http://dba.stackexchange.com/questions/53282/linked-server-between-sql-server-and-iseries-is-rounding-decimals

Buon lavoro a tutti!