1. 問題分析
1.1 驗證環境
VS2005 TS SP1
SQL 2005 SP2 BI Studio
某企業客戶提供的異常資料
1.2 問題場景
在某企業客戶目前Informix資料當中存在很多小于1753-01-01的無效資料,而由于SQL 2005的DateTime 資料類型的資料域是從 1753 年 1 月 1 日到 9999 年 12 月 31 日,會導緻從Informix通過SSIS向SQL Server寫入資料時出錯。
1.3 解決思路
根據對問題的具體分析,給出以下幾種解決辦法:
1.從資料源清理根除無效資料;
2.通過将目标資料表的資料類型設定成整型或字元型解決;
3.通過編寫包含IF邏輯判斷子句的SQL語句解決;
4.通過SSIS擴充腳本元件編寫邏輯代碼塊解決;
5.通過SSIS擴充開發可視化資料流元件來解決;
經過與某企業客戶技術人員的讨論,決定采用對系統影響最小,不需改動資料庫和SQL代碼,不需編寫邏輯代碼塊的第5種方式來解決,即開發SSIS擴充可視化資料流元件。
2. 解決步驟
2.1 元件安裝
1.拷貝DateTimeLimiter.dll到
C:/Program Files/Microsoft SQL Server/90/DTS/PipelineComponents
注:檔案夾位置可能會因SQL安裝位置而不同;
2.打開Visual Studio 2005 指令提示工具,輸入:
gacutil.exe -iF "c:/Program Files/Microsoft Sql Server/90/DTS/PipelineComponents/DateTimeLimiter.dll"
3.打開SQL Server 2005 SSIS項目,選擇并打開資料流任務
從左側工具欄中“選擇項”對話框中選取“SSIS資料流項”中的時間轉換元件(如圖)
2.2 元件使用
1.從資料流轉換欄目中找到“時間轉換”元件,并拖拽到資料流任務中
2.使用方式與資料轉換類似,可在資料源和資料目标之間完成日期資料項的1753問題修複
2.3 運作結果驗證
測試對比結果:
未使用時間轉換元件時:
1753-1-1,1.0,A,湖濱南路五龍大廈龍啟閣603室,0.0
1753-2-1,2.0,O,?0.0
1979-7-12,3.0,T,2227826 8800681,0.0
1752-1-1,4.0,C,湖濱南路五龍大廈龍啟閣603室,0.0
1752-12-31,5.0,H,2227826 8800681,0.0
使用時間轉換元件後:
1753-1-1, 1.0,A,湖濱南路五龍大廈龍啟閣603室,0.0
1753-2-1, 2.0,O,?0.0
1979-7-12, 3.0,T,2227826 8800681,0.0
1753-1-1, 4.0,C,湖濱南路五龍大廈龍啟閣603室,0.0
1753-1-1, 5.0,H,2227826 8800681,0.0