程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL Server BI Step by Step SSIS 3 --- 批量導入Excel表

SQL Server BI Step by Step SSIS 3 --- 批量導入Excel表

編輯:關於SqlServer


  上一次我們已經介紹了簡單的數據導出和導入,但是只是對單一文件進行操作,如果我們想同時對一個目錄下面的所有的文件執行數據導入怎麼實現呢?相當簡單,SSIS在控制流中提供了Foreach循環容器,很容易理解,它和序列容器相比就是能夠循環的遍歷執行,能夠對指定枚舉器的每個成員重復執行控制流:

     

  可以看到,Foreach循環窗器遍歷文件夾可以通過一些設置或者是正則來匹配,使用 Foreach 循環容器,可以枚舉:

  •    ADO 記錄集行和架構信息

  •    文件和目錄結構

  •    系統、包和用戶變量

  •    SQL 管理對象 (SMO)



  首先我們准備一下數據,把上次生成的Excel文件重命名為Product1.xls,新建一個Product2.xls,復制Product1.xls中的ProductID<800的行到新建的Product2.xls中(注意兩個Excel的Sheet名字一致),然後在我們的SSIS項目中新建一個ForeachInput包,Foreach 循環容器容器進來,雙擊進行集合設置,在文件夾處指定我們Excel文件所在的文件路徑,比如F: ,文件名處寫*.xls,這樣就能夠匹配出所有的後綴名為xls的文件,然後單獨執行容器裡面的流程,不過在我們的容器中需要去訪問每一個Excel文件,我們必須獲得每一個枚舉變量也就是文件的名稱,可以通過設置變量映射實現.

 

  如上圖,新建變量後,每次找到一個與條件相匹配的文件時,Foreach 循環容器就會將用該文件名填充用戶定義的變量.同理,當我們遍歷其它對象時,也可以采用變量的方式進行映射,獲得遍歷到的單個匹配對象.


  然後我們直接把上一次建的包(OutputAndInput.dtsx)中的數據導入這個數據流組件復制到Foreach 循環容器中(就象復制普通文件一樣,呵呵),同樣也把連接管理器中的Excel文件連接和數據庫連接復制過來.這樣我們基本上已經完成了,只不過現在的Excel文件連接還是指定文件,我們只需要和我們的變量currentFilePath綁定上就行了.點擊我們的Excel文件連接,在右邊的屬性中點擊Expressions.



  在屬性表達式編輯器裡,我們可以對Excel文件連接的所有的屬性的值直接用表達式綁定,不僅是Excel文件連接,象普通文件連接,數據庫連接,FTP連接同樣可以.這無疑提高了靈活性.在這裡,我們僅需要綁定其文件路徑,在屬性裡選擇ExcelFilePath,然後點擊表達式後面的省略號按鈕.



  這裡不僅可以直接綁定系統變量和用戶變量,而且可以使用腳本組合成表達式.我們只需要選定用戶變量currentFilePath.點擊計算表達式,只是一個空的字符串,因為此時並沒有進行遍歷.所以點擊後發現Excel Source數據流源組件顯示紅色的,提示文件並不存在,我們不需要此時對文件進行檢測,所以將Excel文件連接的延遲驗證DelayValidation屬性值設置成True.

  我們為了防止和數據庫裡面已經有的數據發生沖突,修改派生列組件,因為上一次我們是ProductNumber和Name加了1,這次我們加2.



  然後右擊包執行,你會發現執行成功,而且是執行了兩次數據流(有可能很快看不出來),可以通過對比數據庫看出來,已經添加進了兩個Excel表裡的數據.當然,你可以分成更多個Excel,多少個都沒有關系.

  

  此處,你也可以通過添加數據查看器進行查看執行過程中的數據,這樣可以很方便的進行SSIS包的簡單的調試.右擊派生列組件和Product目標表中間的綠色,點擊數據查看器,然後點擊添加,再選擇網絡,其它全部默認,確定.



  我們把派生列中改成+"3”時再次運行包,你會發現所有的組件都是黃包,這代表正在執行,在彈出來的數據查看器中可以看到所有的數據流的55行數據,點擊上面的綠色按鈕可以繼續運行.通過數據查看器我們可以查看正在數據流中傳輸的數據.

  

  我們在上面的數據查看器中就可以看到新增加的NewProductNumber和NewName兩個列是否正確.

  到現在我們就已經完成了批量導入Excel,本次我們主要學習了Foreach循環容器,並且配合用戶變量的使用,以及在使用連接器中的連接的一些簡單設置,比如屬性動態綁定表達式等,另外還介紹了數據查看器的用法.

  參考文章:http://blog.csdn.Net/jinjazz/archive/2008/07/25/2710169.ASPx


  http://www.Oracle.com.cn/redirect.PHP?tid=85304&goto=lastpost

  出處:http://lonely7345.cnblogs.com

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved