2012-03-14 61 views
1

我有一個SSIS包。該來源是一個SQL查詢。目的地是一張桌子。該包一直工作,直到我將目標表中的列從datetime更改爲datetimeoffset(0)。SSIS getdate進入DateTimeOffset列 - 數據值溢出類型

現在,所有記錄在此特定列上出現「轉換失敗,因爲數據值溢出了提供程序使用的類型」錯誤。

源查詢中的值是getdate()。我嘗試過TODATETIMEOFFSET(getdate(),' - 05:00'),但沒有成功。

事實上,只有到目前爲止已經工作的事情是硬編碼到下列源查詢:

cast('3/14/12' as datetime) 

唯一的其他有趣的信息是,包運行來源時,工作正常查詢另一臺服務器意味着可能涉及一個設置 - 但我沒有看到兩臺服務器之間有明顯的區別。

+0

我有一個類似的問題,我發現做這裏列出的幫助:http://social.msdn.microsoft.com/Forums/en/sqlintegrationservices/thread/8d097a17-af40-417f-9ab2-add67bf5468c。我在派生列中使用了明確的格式。要做的痛苦,但它似乎有一些奇怪的事情發生在SSIS與dateTime元素。 – wergeld 2012-03-14 14:57:24

+0

數據流中列的數據類型是什麼?右鍵單擊源查詢中的路徑並選擇Metadata – billinkc 2012-03-14 15:12:11

回答

2

我會建議增加一個「數據轉換組件」來對付它,但因爲你的目標只是改變了,這意味着你可以改變你的源查詢做:

select cast(YOUR_DATE_COLUMN as datetimeoffset(0)) 
+0

我們最終解決了這個問題。我發現getdate()的源代碼精度太高 - 如果我用毫秒對一個值進行硬編碼,它也失敗了。仍然不確定爲什麼舊方法在一臺服務器上工作,而不是另一臺服務器 - 但是明確地將其轉換爲datetimeoffset(0)工作。 – Mayo 2012-03-14 18:23:47

0

如果其他人正在尋找,我們發現了一個替代解決方案,如果源代碼是SQL 2005(不支持datetimeoffset),則可以使用該解決方案。

select dateAdd(minute,datediff(minute,0,getutcdate()),0) 

意圖是降低精度。當然,我也失去了秒,但如果我用秒來嘗試上面的行,我得到一個溢出錯誤。

相關問題