Ao executar a seguinte consulta
select value, cast(value as float) float_value
from OPENQUERY([ORACLESERVER],
'select 3/5 as value from table')
Eu estou recebendo o seguinte erro:
Msg 8114, Level 16, State 5, Line 1
Error converting data type nvarchar to float
.
Posso executar essa mesma consulta em outro servidor com o mesmo sistema operacional Windows 2012 R2, o mesmo SQL Server 2008 R2 Server e a mesma versão do cliente Oracle 12.1.0 e obter o resultado correto:
value float_value
.6 0,6
Os servidores vinculados em ambos os servidores são configurados de forma idêntica.
A versão do Oracle Server é
select * from OPENQUERY([ORACLESERVER],'SELECT * FROM V$VERSION')
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bi
PL/SQL Release 10.2.0.3.0 - Production
CORE 10.2.0.3.0 Production
TNS for HPUX: Version 10.2.0.3.0 - Production
NLSRTL Version 10.2.0.3.0 – Production
Há alguma outra opção de configuração que eu tenha esquecido no SQL Server e/ou no Oracle Client que pode estar causando esses problemas.
Na verdade é um problema de configuração no Oracle Client
Defina NLS_LANG como AMERICAN_AMERICA.WE8MSWIN1252 e não haverá mais erros de conversão.
ATUALIZAR
Por quê? Porque 0,6 em francês seria lido como um valor de caractere enquanto em inglês permanece numérico. 0,6 em francês é 0,6 em inglês.
Definir NLS_LANG como americano significa que 0,6 permanece numérico, permitindo assim que a conversão como float ocorra sem erro.
É necessário reiniciar.