天天看點

SQL Server Integration Service(SSIS)擴充開發自定義元件解決無效時間問題1. 問題分析2. 解決步驟

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