2014-04-01 74 views
0

我正嘗試使用SSIS將CSV導入數據庫。我遇到的問題是列號爲smalldatetime的數據類型沒有空值。與此列關聯的字符串的格式爲MMddYYYY,它也沒有空值。 目前我正在嘗試使用Derived列將字符串轉換爲DT_DBTIMESTAMP使用SSIS將字符串轉換爲smalldatetime對象

目前我收到錯誤消息:[Derived Column [36]] Error: An error occurred while attempting to perform a type cast.

在我的表情場,我有:(DT_DBTIMESTAMP)(SUBSTRING([Derived Column 5],5,4) + "/" + SUBSTRING([Derived Column 5],1,2) + "/" + SUBSTRING([Derived Column 5],3,2))

預先感謝您的幫助!

+0

似乎與數據有關。確保輸入數據格式在所有情況下實際上都是MMddYYYY,並且在安全方面修剪表達式中的列:(DT_DBTIMESTAMP)(SUBSTRING(trim([Derived Column 5]),5,4)+「/」 + SUBSTRING(trim([Derived Column 5]),1,2)+「/」+ SUBSTRING(trim([Derived Column 5]),3,2))。另外請確保您在此列中沒有空值或空值。 – Jayvee

+0

此鏈接http://technet.microsoft.com/en-us/library/ms141036(v=sql.105).aspx表示'DT_DBTIMESTAMP'所需的格式爲'yyyy-mm-dd hh:mm:ss [ .fff]'。你爲什麼在你的轉換中使用斜槓?也可以嘗試在00:00:00結束以滿足hh:mm:ss部分。同時確保你在記事本中檢查你的文件,而不是Excel。最後將第5列加載到varchar字段中,並在轉換之前檢查它。 –

+0

謝謝@ElectricLlama我會試試 – Trax5

回答

1

我在IT在25年前開始,並且覺得有些鬱悶,我們是仍然努力得到兩個不同的系統日期,以整合...嘆息... ...

我會放棄SSIS表達式對於這個需求並使用腳本任務來代替。 .NET DateTime.TryParse方法是一個優雅的解決方案,可以輕鬆地針對不同的日期格式進行擴展。

+0

我感到你的痛苦,但我把它降低到50%的經驗不足和50%公然的驅動程序錯誤。 –

+0

@ElectricLlama我想我的觀點是,我們不應該需要多年的經驗才能弄清楚如何按照整合日期來做一些基本的事情。 –

+0

我完全同意,你認爲現在會更容易。現在至少有一個ISO標準格式(可能已經有很長一段時間了,但我在過去幾年才意識到這一點)。 –