Acabamos de configurar um novo banco de dados do SQL Server 2008 e configurei o link entre nosso servidor e um servidor iSeries As400 do qual obtemos alguns de nossos dados.
O problema que estou tendo é que está arredondando para baixo quaisquer números flutuantes, o que é uma dor porque estamos trabalhando com valores em dólares a maior parte do tempo.
select * FROM openquery(NADS, 'select CMD, 1.23 Type from CREDD')
Em nosso servidor mais antigo, isso retorna a coluna CMD e uma coluna chamada Type com 1,23 até o fim. No novo tipo de servidor é apenas 1,00
Tanto quanto eu posso dizer, a parte do link é configurada da mesma forma. A configuração ODBC do IBM i Access para Windows é basicamente a mesma, mas há algumas diferenças entre as versões das quais não tenho certeza.
Editar: caso seja importante, para o provedor, estou usando o Microsoft OLE DB Provider para drivers ODBC
Edit2:
as opções do provedor são as mesmas
Propriedades do servidor vinculado:
A configuração do iSeries Access para Windows ODBC parece ser a mesma
Descobri!!
Aparentemente, não tínhamos o service pack mais recente instalado. Tivemos que instalar a versão de 64 bits do service pack (a versão de 32 bits não foi instalada) e, quando terminou, os números decimais estavam aparecendo.
Caso alguém esteja se perguntando:
estamos usando "IBM iAccess para Windows 7.1 (07.01.0800) (64 bits)" e usando "Microsoft OLE DB Provider para drivers ODBC" como o driver sql do servidor vinculado.
Vendo que acabei de encontrar esse problema novamente e tive que caçar o service pack novamente, aqui está o link para a página de download do service pack, para que em alguns anos, quando eu me deparar com esse problema novamente, acharei mais fácil .. .
http://www-03.ibm.com/systems/power/software/i/access/windows_sp.html
A solução é simples: deixe o AS400 converter o valor em float porque a conversão implícita aplicada pelo provedor iSeries falha quase sempre. Então, muito simplesmente:
Desta forma, tudo funciona bem: 1.23 será flutuante no Sql Server também