天天看點

使用SSIS建立同步資料庫資料任務

下面我使用SSIS來示範一個實際例子。比如我有一個資料庫,出于備份資料或者其它的目的,會定期的對這個資料庫的資料遷移到其它的資料庫去。遷移的時候,有些新增的字段會被插入備份資料庫,而有些被修改過的字段也會在備份資料庫被修改。現在我們就用SSIS來完成這項任務。

首先在我源資料庫db_source和目标資料庫db_destination中運作以下SQL建立好需要的表,就以這一個表test_1來進行示範。

建好表好在源資料表中可以随便加幾條記錄,目标資料庫暫時留白。

現在我們打開VS,建立一個Intergration Services Project。(注意:如果SQL Server 裝的是Express版的話是沒有這個項目工程模闆的)

使用SSIS建立同步資料庫資料任務

建立好工程後,在Control Flow這個Tab下拖入一個Data Flow Task,如下圖:

使用SSIS建立同步資料庫資料任務

輕按兩下這個Data Flow Task,我們就會進入Data Flow這個Tab标簽中。

然後我們在左邊工具欄裡找到OLE DB Source,繼續拖兩個OLE DB Source出來。分别給它們命名為Source DB和Destination DB。

使用SSIS建立同步資料庫資料任務

将資料源拖出來後,輕按兩下它,可以對它進行一些設定,主要就是連結資料庫及選擇你要進行遷移的表或者視圖等設定,這裡我就不詳細說明了。注意一點的是就像上圖所示,如果一個圖形上出現一個紅X的話說明設定有錯誤。

再來就是拖兩個Sort及一個Merge Join出來,将之前的資料源箭頭分别指向兩個Sort,最後兩個Sort出來的資料同時輸入Merge Join中。

使用SSIS建立同步資料庫資料任務

這裡我們第一次從Sort拉箭頭到Merge Join的時候,會讓我們選擇這個輸入的資料是作為左輸入還是右輸入,我們按照圖示的那樣,左邊的作為左輸入,右邊的作為右輸入。然後我們輕按兩下Merge Join,按照如下圖所示設定:

使用SSIS建立同步資料庫資料任務

這裡打鈎的是這個流程之後輸出的資料,Join Type需要選擇為Left outer join,因為左邊是我們的原始資料表,右邊是我們備份的表,右表可以看成是一個左表的一個子集,如果左表有的資料,右表沒有的,那些就是需要新插入備份資料庫的資料。

現在我們需要一個分支,即新的資料需要插入備份資料庫中,而已有的資料需要更新為新的值。我們從工具欄中拖入一個Conditional Split來進行這樣的分支處理。我們将Merge Sort中的輸出指向Conditional Split,然後輕按兩下Conditional Split,如下圖所示設定(注意條件一個是ISNULL,一個是非ISNULL)。

使用SSIS建立同步資料庫資料任務

這時它們的輸入值就被分成兩種條件輸出,最後我們再拖入一個OLE DB Destination來插入資料和一個OLE DB Command來更新資料庫,最終流程如下圖:

使用SSIS建立同步資料庫資料任務

輕按兩下設定OLE DB Destionation,選擇好資料導入的目标資料庫中的表,這裡需要注意的就是要鈎選Keep identity這個選項,因為我建立表的時候對ID字段使用了自增屬性。

輕按兩下設定OLE DB Command,首先在Connection Managers這個Tab中選擇好連結對象,然後在Component Properties這個頁籤中,設定你的SqlCommand屬性。如下圖:

使用SSIS建立同步資料庫資料任務

這裡的參數值都是用?号來代替,之後在Column Mappings這個Tab中設定代替值實際代替的列,如下圖:

使用SSIS建立同步資料庫資料任務

至此,任務就建立完畢了,沒有編寫任何代碼,直接拖拉完成了。現在可以直接在VS中按F5運作看下效果,我們的目标資料表将插入源資料表中的值。然後我們修改一下原資料表,再來運作一下上面這個任務,就可以在目标資料庫中看到更改了。

那麼如何去定時完成任務哩?這裡可以用SQL Server Agent去調用上面我們寫好的包, 或者在Windows計劃任務中使用DTExec.exe去執行上面的任務。