我們已經實現了把Excel中的資料匯入到資料流目的地,也就是資料庫中,但是我們只是類比了不重複的資料,也就是都是資料庫中此時不存在的資料.那麼如果資料流源Excel中的資料和資料庫中的資料的主鍵相同的情況下,再進行插入操作就會出現異常,怎麼才能實現自動的更新操作呢?也就是自動的判斷資料來源的資料,如果資料庫中存在就執行更新,不存在就執行插入呢?
可能叫做合并資料會有些誤解,這裡的合并資料與資料流中的Merge組件和Merge Join組件直接實現的效果是有差別的,首先我們看看這兩個組件.
我們建立一個包,重合名為MergeData,然後在控制流程中將上次的ForeachInput包中的組件全部複製過來(包括連線管理員),刪除Foreach迴圈容器,然後修改資料流,添加兩個Excel資料流源,分別對其通過Sort進行排序(按照ProductNumber欄位),再添加Merge進行資料合併,分別添加三個資料檢視器,修改後的資料流圖如下:
我們執行一下,三個資料檢視器的部分載圖如下:
可以看到,Merge資料合併了兩個資料來源的資料,但是並不直接實現我們想達到的目標,不過注意到Merge有以下兩個特點:
1.使用Merge轉換之前必須對資料進行排序,可能通過象上面那樣使用Sort轉換,或者直接在源串連中指定ORDER BY直接完成.
2.合并資料的兩個路徑之間的中繼資料必須相同.
3.只能應用於兩個資料的合并,如要兩個以上,可考慮選擇Union All轉換
Merge Join組件和Merge組件有什麼樣的區別呢?我們再建立一個包MergeData2來看下Merge Join組件,兩個資料流源分別串連到Product表和ProductInventory表,修改資料流如下:
兩個Sort分別按照ProductID欄位進行升序排序,Product路徑輸入資料流作為左側輸出,Merge Jogin組件設定成左外部串連(左串連,外部,內部串連和SQL一樣),並選擇需要輸出傳遞到路徑的列:
執行過程的三個資料檢視器顯示的資料如下:
可以看到和SQL的串連一下,將產品的基本資料和產品的庫存資訊串連在一起組合一起,它的作用就是可以合并兩個輸入的輸出並對資料執行INNER或者OUTER串連,當然,如果兩路輸入位於同一個資料庫中,你直接使用OLE DB資料層級的join操作會更快,但是當你希望合并兩個不同的資料來源時,Merge Join就可以派上用場了.
OK,今天就到這裡,我們主要今天主要是熟悉了Merge和Merge Join,但是並沒有實現我們上面提出來的直接同步處理合并資料的需求(不過其實仔細考慮一下,其實再結合其它的組件可以實現).下幾次我們將採用幾種方式實現.
本次專案檔下載.(for Vs 2005)
作者:孤獨俠客(似水流年)
出處:http://lonely7345.cnblogs.com
本文著作權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文串連,否則保留追究法律責任的權利。