SQL Server DBLlink to oracle将数字作为字符串返回

时间:2015-02-19 09:59:00

标签: sql sql-server oracle linked-server

我有一个包含我的数据的Oracle数据库和一个通过DBLink从Oracle获取数据的SQL Server数据库。 问题是 - SQL表中的所有数字都在SQL Server中被接受为nvarchar。因此,当我尝试使用some_number_field = 0过滤SQL Server中的查询时,我得到: “将nvarchar值'3.141'转换为数据类型int时转换失败。” 如果我尝试选择“some_number_field * 1”或类似表达式,也会发生这种情况。 有什么想法吗?

1 个答案:

答案 0 :(得分:1)

今天我遇到了同样的问题。似乎数据类型为NUMBER的Oracle字段显示为nvarchar,通过链接服务器进行查询。但是,NUMBER(x,y)不是。

E.g。 colB是Oracle View(或表)中的NUMBER字段 试试这个:

SELECT colA, CAST(colB AS DECIMAL(23,2)) colB
FROM OPENQUERY(LINKED_SERVER_NAME, 'select * from myView')

注意:DECIMAL(xx,y)值当然取决于您的数据。另外,请记住,如果您的NUMBER列是重复部分(例如33.33333333等),则需要在oracle端放置一个round(),否则CAST将抛出错误。