2011-07-01 132 views
0

我正在創建一個SSIS包,第一步是獲取存儲在文件中的文件列表並將此信息存儲在對象變量中。我將這個變量傳遞給試圖打開文件列表的任務。但是,如果由於文件夾爲空而沒有要打開的文件,則打開的文件任務將失敗。爲對象變量創建表達式?

我對使用SSIS比較陌生,並且對如何重寫表達式以檢查對象變量是否爲空以及是否爲空不允許打開文件任務運行感到好奇。

回答

4

您不需要使用對象變量來遍歷文件夾中的文件。您可以使用Foreach Loop Container輕鬆實現。下面的例子演示瞭如何做到這一點。該示例創建於SSIS 2008 R2

步一步的過程:

  1. 假設我們通過路徑C文件需要循環:\ TEMP如圖截圖#。

  2. 在SSIS包,創建三個變量即FOLDERPATHFilePattern文件路徑。請參閱屏幕截圖#。將FolderPath變量設置爲您要循環訪問的文件夾,在這種情況下,我選擇了C:\temp。將FilePattern變量設置爲您的文件應該匹配的模式,在這裏我想遍歷所有文件,因此我使用了*.*。如果您只想循環瀏覽Excel 2010文件,則可以使用*.xlsx。它只能接受一種模式。不要將任何值設置爲變量FilePath,因爲當Foreach循環容器循環遍歷文件夾中的每個文件時,它將被賦值。

  3. 在封裝的控制流標籤,放置Foreach Loop container,然後將foreach循環容器內的腳本任務。在這個例子中,我們將簡單地遍歷每個文件並顯示它們的名字,而不再做任何事情。請參閱屏幕截圖#。

  4. 配置Foreach循環容器中的屏幕截圖示出#4 #。在Collection部分,我們已經配置了表達式以使用變量FolderPathFilePattern。在變量映射部分,我們告訴容器將文件路徑值存儲到FilePath變量中。

  5. 在腳本任務中,用腳本任務代碼部分中給出的代碼替換Main()方法代碼。代碼中沒有什麼特別的。它只是在消息框中顯示文件路徑。

  6. 截圖# - #顯示了一個示例包執行,以及如何在文件夾中的每個文件通過循環。請注意屏幕截圖#,腳本任務標記爲綠色顏色,指出包已成功執行任務。

  7. 現在,讓我們刪除文件夾C:\ temp中的所有文件,如屏幕截圖#中所示。

  8. 如果我們現在執行包,那麼Foreach循環容器中的任務將不會執行,因爲沒有文件循環並且文件夾爲空。請參閱屏幕截圖#。請注意,腳本任務標有白色顏色,指出軟件包未執行腳本任務並跳過該部分。

  9. 這只是一個簡單的例子。你可以做更多的事情,而不僅僅是顯示文件的名字。您可以在Foreach循環容器中執行其他任務並通過FilePath變量來處理這些文件。

希望有所幫助。

腳本任務代碼:

C#代碼只能在SSIS 2008 and above使用。

public void Main() 
{ 
    Variables varCollection = null; 

    Dts.VariableDispenser.LockForWrite("User::FilePath"); 
    Dts.VariableDispenser.GetVariables(ref varCollection); 

    MessageBox.Show(varCollection["User::FilePath"].Value.ToString(), "File Path"); 

    Dts.TaskResult = (int)ScriptResults.Success; 
} 

截圖#1:

1

截圖#2:

2

截圖#3:

3

截圖#4:

4

截圖#5:

5

截圖#6:

6

截圖#7:

7

截圖#8:

8

截圖#9:

9

截圖#10:

10

截圖#11:

11

截圖#12:

12

截圖#13:

13

+0

這是非常有用的!非常感謝! – buzzzzjay