我們已經介紹了三種方法來實作資料流源和資料庫資料的合并,也就是Excel中的資料和資料庫裡面的資料進行同步,存在的資料進行更新操作,不存在的添加資料,另外還可以擴充為,如果資料庫為的資料在Excel資料源中不存在,則執行删除操作.接下來我們來介紹其它的方法來實作這樣的目标.
我們在合并資料1中曾經介紹過,直接通過Merge和Merge Jone是無法直接實作的,不過我們可以通過變通的方法實作.首先我們建立一個包MergeDataMerge,像之前一樣,象上次一樣,準備控制流,變量和連接配接管理器.其實前面和合并資料1中的MergeData2一樣,将Excel資料源和資料庫表資料根據ProductNumber字段進行合并.
這裡我們選的是完全外部連接配接,這樣才能完全合并兩邊的資料.當一方資料沒有比對的資料時,有NULL代替.是以我們直接根據合并後的ProductNumber和NewProductNumber 就可以直接這行資料應該對應的是添加,更新,還是删除.在Merge Join元件下面,我們添加Conditional Split元件,這個元件來判斷對于不同的情況的分支:
很簡單,當行中對應的ProductNumber為NULL時,說明沒有從資料庫時面查到比對的資料,是以這條資料應該進行新增操作,當NewProductNumber為NULL時,說明Excel資料源中不存在資料庫中ProductNumber對應的資料,是以此條資料應該進行删除,最後,如果兩個ProductNumber相同,則應該進行更新操作.這裡需要注意的是,一定要把兩個判斷ISNULL的條件放在前面,因為我們在第三個裡面用到了TRIM,如果為NULL值時,會有錯誤發生.
接下來我們介紹一下使用SCD Component怎麼來實作這個,我們先建一個包MergeDataSCDComponent,同樣,準備好其它的資源,然後拖動Slowly Changing Dimension元件進來,輕按兩下這個控件進行設定,我們會發現,這類似于一個安裝程式,可以一步一步的設定,點選下一步,首先我們需要選擇資料連接配接管理器,然後再設定業務鍵,在這裡我們設定ProductNumber列作為業務鍵:
再點選下一步,在這裡我們可以選擇資料源中的列,然後設定此列的更改類型,分為固定,變化還是曆史,在左面已經列中不同的類型的詳細說明:
可以看到這個元件很強大,可以針對不同的更改類型做出這麼多的區分,我們再點選下一步,看到在這裡可以設定,如果固定類型的屬性更改時是否轉換失敗,變化的屬性更改時,是否更改所有的比對記錄.
我們直接下一步,然後完成整個配置,可以看到,Slowly Changing Dimension下面多出來了三個分支,就象我們前幾次實作的一樣,隻不過這次是全部配置完成的.雖然下面的其中的兩個元件名顯示的是英文(估計是沒有對應的中文翻譯),不過還是相應強大的.
我們來看一下插入目标這個元件,自動生成的隻是一個OLE DB目标元件,然後已經把字段映射好了,而且對于一些特殊的列已經自動進行了忽略(考慮的還真周到).其它的兩個更新的操作,都是生成的OLE DB Command元件,而且自動生成了SQL語句.
我們運作一個這個包,發現能夠自動的判斷資料是否更新,還是插入:
好了,到現在為止,合并資料就介紹完了.
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。
本文轉自孤獨俠客部落格園部落格,原文連結:http://www.cnblogs.com/lonely7345/archive/2009/03/11/1408353.html,如需轉載請自行聯系原作者