2010-07-08 27 views
0

我特林創建一個SSIS包輸入一些數據集文件,但是因爲我似乎擊中一磚SSIS適合

牆每次我完成任務的一小部分,我需要走一步背部和執行什麼我

試圖實現一個全面的檢查,如果你優秀的人可以建議SSIS是否去這個問題,那麼我會

欣賞它的方式。

這些是從今天早上我的問題: -

debugging SSIS packages - debug.writeline

Changing an SSIS dts variables

我試圖做的是有一個For..Each容器枚舉的文件共享上SQL Server。對於每個

文件找到一個腳本任務運行,以檢查文件名的各種屬性,比如找一個三個字母

代碼,在CCYYMM日期,其中所包含的數據的名稱,以及可選的一些註釋。例如: -

ABC_201007_SalesData_ [可選註釋放在這裏]的.csv

我期待使用正則表達式來解析名稱,並把 'ABC' 的價值觀,「'和

'SalesData'in variables。

然後我想將文件移動到文件夾中的錯誤,如果它不符合特定標準: -

  • 三字代碼
  • 6字符日期
  • 數據集的名稱(例如SALESDATA,在本示例)
  • CSV擴展

我然後把要查找的字符代碼,日期(或其部分),並且數據集名稱與查詢表

標記來自每個客戶端的收到文件的「清單」。

然後,根據清單中的條目,我想啓動另一個SSIS包。

所以,例如我可能有一個叫做「清單」與這些列的表: -

Client code  Dataset   SSIS_Package 
    ABC   SalesData  NorthSalesData.dtsx 
    DEF   SalesData  SouthSalesData.dtsx 

如果任何人有實現這一目標,我希望聽到關於它的更好的方法。

在此先感謝

回答

3

這是一個有趣的場景,應該相對容易處理。

首先,您選擇的Foreach Loop是一個很好的選擇。您將使用Foreach文件枚舉器。你可以限制你迭代的文件只是CSV文件,這樣你就不必爲後面的文件「過濾」了。

Foreach File Enumerator將文件名(完整路徑或只是文件名)放入一個變量 - 我們稱之爲「FileName」。有(至少)兩種方式可以解析 - 表達式或腳本任務。取決於你更喜歡哪一個。無論哪種方式,您都需要創建三個變量來保存文件名的「部分」 - 我將它們稱爲「FileCode」,「FileDate」和「FileDataset」。

要使用表達式執行此操作,需要將FileCode,FileDate和FileDataset上的EvaluateAsExpression屬性設置爲true。然後在表達式中,您需要使用FINDSTRINGSUBSTRING來雕刻FileName,只要您認爲合適。表達式不具有Regex功能。

要在腳本任務中執行此操作,請將FileName變量作爲ReadOnly變量傳遞,其他三個作爲ReadWrite。您可以使用.Net的Regex功能,或者只需手動使用IndexOfSubstring即可獲得您所需的功能。

+0

這是否總是一個用戶定義的變量? – 2015-04-21 23:50:16