【问题标题】:Handling Dates from Oracle to SQL Server 2005 using OPENQUERY使用 OPENQUERY 处理从 Oracle 到 SQL Server 2005 的日期
【发布时间】:2013-08-29 12:43:36
【问题描述】:

我已将 SQL Server 2005 链接到 Oracle 服务器,并且正在使用 OpenQuery() 将数据从 Oracle 传递到 SQL Server。

因此,例如,以下查询可以正常工作:

SELECT *
FROM OPENQUERY(ORACLE_LINK, 'SELECT FIELD1
    FROM ORACLE.TABLE1');

一切正常,除非我要求 Oracle 数据库中的日期/时间字段。例如,假设 TABLE1 有十个字段,其中一个是时间戳。如果我要求除时间戳之外的所有九个字段,它就可以工作。如果我问:

SELECT *
FROM OPENQUERY(ORACLE_LINK, 'SELECT *
    FROM ORACLE.TABLE1');

我收到以下错误:

OLE DB provider "MSDAORA" for linked server "ORACLE_LINK" returned message "Oracle error occurred, but error message could not be retrieved from Oracle.".
OLE DB provider "MSDAORA" for linked server "ORACLE_LINK" returned message "Data type is not supported.".

如果我只要求时间戳字段,我也会得到同样的错误。

处理此错误的最佳方法是什么?谢谢。

【问题讨论】:

    标签: sql sql-server oracle sql-server-2005 datetime


    【解决方案1】:

    我用这个函数来做(部分代码):

    select @StringOut = '{ts ''''' + convert(varchar(20), @DateIn, 20) + ''''' }';
    RETURN @StringOut
    

    这进入查询:

    and procedure_date_dt = ' + dbo.TimestampString(@date) + '
    and event_type = ''''Time Notation''''
    

    当我运行它时它会起作用。

    【讨论】:

    • 谢谢。您能否详细说明如何在我的问题中的代码示例中使用此部分代码?
    • 哦,您在 select 子句中遇到了问题。当您使用您的服务器名称运行“select * from openquery (ORACLE_SISI, 'select sysdate from dual');”时会发生什么?
    • 我现在成功了。
    • 问题字段的数据类型是什么?
    • 这是一个时间戳。我通过将时间戳转换为查询字符串中的日期解决了这个问题。感谢您的帮助!
    猜你喜欢
    • 2012-08-11
    • 1970-01-01
    • 2019-09-21
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    • 2014-08-29
    • 1970-01-01
    • 2012-07-22
    相关资源
    最近更新 更多