2013-08-26 102 views
1

我有联系的SQL Server 2005到Oracle服务器,并且正在使用OPENQUERY()从Oracle的数据传递到SQL Server。处理日期使用OPENQUERY

所以,举例来说,下面的查询工作正常:

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.". 

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

什么是处理这个错误的最好方法?谢谢。

回答

2

我使用此功能(部分代码)做到这一点:

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

这进入查询:

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

,当我运行它,它的工作原理。

+0

感谢。你能详细说明如何在我的问题中使用这个部分代码和代码示例吗? – user1893148

+0

哦,你在select子句中遇到了问题。当您运行“从OPENQUERY选择*(ORACLE_SISI,‘从双重选择SYSDATE’);”会发生什么,但您的服务器名称? –

+0

我现在成功了。 – user1893148