【问题标题】:SQL Server DBLlink to oracle returns numbers as stringSQL Server DBLlink 到 oracle 将数字作为字符串返回
【发布时间】:2015-03-06 17:36:22
【问题描述】:

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

【问题讨论】:

  • SQL Server 正在获取数据吗?所以我想它是链接服务器。
  • 对不起,我不明白。 “它是链接服务器”是什么意思?我在从 oracle 检索数据的 SQL Server 中有一个 dblink,但格式出错...
  • 我也是这样,当Oracle中的列类型是'number(3,0)'时没问题,问题只是当oracle列类型只是'number'时

标签: sql sql-server oracle linked-server


【解决方案1】:

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

例如colB 是 Oracle 视图(或表)中的 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 会抛出错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 2013-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多