【问题标题】:SQL Server : Openquery to Oracle: Data type for number/numericSQL Server:对 Oracle 的 Openquery:数字/数字的数据类型
【发布时间】:2015-04-09 02:58:08
【问题描述】:

在 SQL Server 2012 SP2 上,我使用 OPENQUERY 到 Oracle 9/10/11。一般来说,我处理整数,现在我们有一些OPENQUERY 处理浮点数。这些值存储在数据类型为number() 的列中。在 SQL Servre 中,有效数字将被截断。在 SQL Server 中,此列被处理为 NUMERIC(38,0)

我可以在数据库或链接服务器的设置中更改此数据类型处理吗?还是通过在从 Oracle 传输到 SQL Server 之前将数字转换为字符来避免这种误解的最佳做法?

我在 Oracle 中创建表的示例:

CREATE TABLE oratab 
(
      num_col1 number , num_col2 number(10, 5) ,
      flo_col1 FLOAT , flo_col2 FLOAT(5)
);

INSERT INTO oratab ( num_col1, num_col2, flo_col1, flo_col2)
VALUES (3.1415, 3.1415, 3.1415, 3.1415);

SELECT 
     num_col1, num_col2, num_col3, flo_col1, flo_col2 
FROM oratab;

正如预期的那样,结果是:

NUM_COL1 | NUM_COL2 | FLO_COL1 | FLO_COL2
------------------------------------------
 3.1415  |  3.1415  |  3.1415  |   3.142 

当我从 SQL Server 对此表进行选择时

SELECT 
    num_col1, num_col2, flo_col1, flo_col2 
FROM 
    OPENQUERY (ORADB, 'SELECT num_col1, num_col2, flo_col1, flo_col2 FROM oratab')

我得到以下结果:

NUM_COL1 | NUM_COL2 | FLO_COL1 | FLO_COL2
------------------------------------------
    3    | 3,14150  |  3.1415  |   3.142 

当我将数字数据转换为 char 时,我会得到预期的结果

SELECT num_col1 
FROM OPENQUERY (ORADB, 'SELECT to_char(num_col1) FROM oratab')

当我从这个OPENQUERY 中运行一个选择时,SQL Server 使用数据类型NUMERIC(38,0) 创建列num_col1

【问题讨论】:

    标签: sql-server oracle type-conversion sqldatatypes openquery


    【解决方案1】:

    您必须明确地CAST 达到所需的精度:

    SELECT 
        num_col1,
        cast(num_col2 as number(10,5)) as num_col2,
        flo_col1, 
        cast(flo_col2 as float(5)) as flo_col2
    FROM OPENQUERY (ORADB, 'SELECT num_col1, num_col2, flo_col1, flo_col2 FROM oratab')
    

    【讨论】:

      【解决方案2】:
      SELECT *
      FROM OPENQUERY (ORADB, 'SELECT to_char(num_col1), num_col2, flo_col1, flo_col2 FROM oratab')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-03
        • 2011-07-26
        • 1970-01-01
        • 2011-06-05
        相关资源
        最近更新 更多