2012-07-14 46 views
1

我必須設置爲在MS SQL Server 2012中的鏈接服務器在整個數據庫的ODBC數據源,大多數(但不是全部)列,其數據類型是迄今爲止給我搗亂,每當我運行查詢。查詢除這些日期類型列以外的任何列都不會遇到任何問題。錯誤轉換dbtype_dbdate最新

下面的查詢:

SELECT * 
FROM OPENQUERY(LINKEDSERVERNAME, 'SELECT Product, 
              DateLastReceipt 
            FROM ProductTable') 

提供了以下錯誤在SQL Server Management Studio中(2012年)的消息:我一直在使用轉換爲數據類型換算成每以下爲varchar試圖

Msg 8114, Level 16, State 10, Line 1. Error converting data type DBTYPE_DBDATE to date.

沒有任何的運氣(相同的錯誤信息)的討論:http://social.technet.microsoft.com/Forums/en-US/transactsql/thread/3a7d94ee-46a0-40ce-ae95-127ec462fbff

現在,有完全相同的數據類型的一些列(日期)個不要給我任何麻煩。例如,在我的ProductTable中,有一個名爲AddedToFile的列,顯示記錄的創建日期。本專欄完全沒有給我帶來麻煩。

任何人可以提供的幫助將非常感激。

謝謝。

回答

0

希望這有助於(我不使用SQL Server 2012)。
如果您的ODBC鏈接到db2,對於日期範圍不支持例如'0001-01-01',你需要施放。 通常這是有效的。

SELECT * 
FROM OPENQUERY(LINKEDSERVERNAME, 'SELECT Product, 
             CAST(DateLastReceipt AS CHAR(10)) 
           FROM ProductTable') 

如果你還想要的結果日期,只需使用CASE和更換失效的日期到您的默認日期.e.g。

SELECT * 
FROM OPENQUERY(LINKEDSERVERNAME, 'SELECT Product, 
           ,CASE WHEN DateLastReceipt AS CHAR(10)) = ''0001-01-01'' 
             THEN CURRENT_DATE 
            ELSE DateLastReceipt 
            END 
           FROM ProductTable') 

您可能需要更改CURRENT_DATE CURRENT_TIMESTAMP的和CASE組成取決於你的數據庫服務器和您的要求

+0

感謝@lamLam上。你的第一個建議的查詢引發以下錯誤對我來說:OLE DB提供程序「MSDASQL」鏈接服務器「LINKEDSERVERNAME」返回了消息「[Transoft] [TSODBC] [usqlsd]‘從’這裏預期(()」 使用第二。查詢時,我得到以下錯誤:OLE DB提供程序「MSDASQL」鏈接服務器「LINKEDSERVERNAME」返回了消息「[Transoft] [TSODBC] [usqlsd]名稱預期(,)」 是我的語法搭配既能襯托這些?這些似乎並沒有成爲最描述性錯誤消息。 感謝您的幫助,我是新來這。 – Kyle 2012-07-16 19:20:56

+0

對不起,我從來沒有使用Transoft之前充塞。你可以嘗試...直接使用Transoft客戶端運行SELECT語句(如果有的話)或直接到服務器** SELECT Product,CAST(DateLastReceipt AS CHAR(10))FROM ProductTable **。在轉換日期搜索Transoft sql手冊品格。可能Transoft不支持CAST,或者使用CHARACTER(10)而不是CHAR或使用不同的函數。一旦工作,只需將整個事情複製回SQL服務器腳本 – lamLam 2012-07-17 02:20:51