执行以下查询后
select value, cast(value as float) float_value
from OPENQUERY([ORACLESERVER],
'select 3/5 as value from table')
我收到以下错误:
Msg 8114, Level 16, State 5, Line 1
Error converting data type nvarchar to float
.
我可以在具有相同 Windows 2012 R2 操作系统、相同 SQL Server 2008 R2 服务器和相同 Oracle 12.1.0 客户端版本的另一台服务器上运行相同的查询并返回正确的结果:
value float_value
.6 0,6
两台服务器上的链接服务器配置相同。
Oracle 服务器版本是
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
我在 SQL Server 和/或 Oracle 客户端中是否有任何其他可能导致这些问题的配置选项被忽略。
这实际上是 Oracle 客户端中的配置问题
将NLS_LANG设置为 AMERICAN_AMERICA.WE8MSWIN1252 并且不再出现转换错误。
更新
为什么?因为法语中的 0.6 将被读取为字符值,而在英语中它仍然是数字。法语的 0,6 是英语的 0.6。
将 NLS_LANG 定义为 American 意味着 0.6 保持数字,因此允许强制转换为浮点数而不会出现错误。
需要重启。