使用OPENQUERY处理从Oracle到SQL Server 2005的日期

时间:2013-08-26 22:28:40

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

我已将SQL Server 2005与Oracle Server相关联,并使用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.".

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

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

1 个答案:

答案 0 :(得分:2)

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

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

这将进入查询:

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

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