2013-08-26 103 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