整個流程
Step 1 放置一個FTP Task 將遠程文件復制到本地
建立FTP鏈接管理器后 Is LocalPatchVariable 設置為Ture 並創建一個變量設置本地路徑
Operation 設置為 Receive files
OverwriteFileAtDest 設置為True
同樣的設置遠程路徑變量
Step 2 放置一個Foreach Loop ,循環將文件內容導入到數據庫
Collection 頁中Enumerator 選擇Foreach File Enumerator
圖中 Folder: 用表達式里面的 Directory代替,變量值直接套用FTP配置建立的LocalStoreFiles變量
Files設置不變,保持 *.* 獲取目錄下所有文件
Retrieve file name ,選擇Fully qualified (獲取文件全名,包括目錄)
Variable Mappings 頁 新增一個變量LoadFile 用來獲得 Fully qualified的返回值
Step 3 放置一個Data Flow Task 到 Foreach Loop Container並打開
1) 創建一個Flat File Connection Manager 並選擇一個文件進行配置
點擊Flat File Connection Manager ,然后在屬性中配置表達式,將鏈接字符串設置為剛才設置的變量 LoadFile。用來獲取每個文件
2) 放置一個 Flat File Source 並選擇剛才配置的Flat File Connection Manager
此時可以先先測試一下效果。注意由於LoadFile現在沒有值,執行的時候SSIS檢查到可能會報錯,我們把 StoreFile 的 DelayValidation 屬性設置為True即可
3) 放置一個Lookup判斷原有數據是否重復
Lookup 配置增量方式也可以參考我之前幾篇文章
[譯]Stairway to Integration Services Level 3 - 增量導入數據
[譯]Stairway to Integration Services Level 4 - 增量更新數據
[譯]Stairway to Integration Services Level 5 - 增量刪除數據
4) 放置一個OLE DB Destination,改名為 Staging 然后將Lookup的Lookup Match Output 連到 Staging 用來存放匹配的記錄
5) 再放置一個OLE DB Destination,改名為 Stores Table 然后將Lookup的Lookup No Match Output 連到Stores Table用來放未匹配的新紀錄
Step 4 拖動一個Execute SQL Task到Control Flow,用來更新匹配的記錄
執行語句
update stores set TerritoryID = ss.TerritoryID ,StoreName = ss.StoreName ,Address1 = ss.Address1 ,Address2 = ss.Address2 ,City = ss.City ,State = ss.State ,Zip = ss.Zip from stores s join StoreStaging ss on ss.BusinessEntityID = s.BusinessEntityID
之后與Foreach Store File Loop 鏈接
Step 5 再拖一個Execute SQL Task 用來清空臨時表
Step6 移動已導入的文件
1) 建立一個 File Connection Manager ,並選擇‘已完成’目錄,更名為Complete Folder
2) 在建立一個 File Connection Manager 並隨意選擇一個csv文件,更名為StoreFilePhy
同樣的,設置連接字符串
3) 拖一個 File System Task 到 Foreach Store File Loop里面
進行相關設置