2010-03-30 64 views

回答

7

我檢查了文件存在,使用Script Task,然後進行相應的分支。

你可以做這樣的事情

If System.IO.File.Exists("\\Server\Share\Folder\File.Ext") Then 
    Dts.TaskResult = Dts.Results.Success 
Else 
    Dts.TaskResult = Dts.Results.Failure 
End If 

雖然有這個沒有本地組件,也有幾個SSIS第三方組件,你可以使用這個目的。

SSIS中的File System Task基本上用於移動,複製,刪除等,但不支持文件存在檢查。

3

@Raj更給出了一個很好的解決方案。我之前使用過的另一種方法是創建一個Foreach循環容器,該文檔循環遍歷文件系統中的文件規範。如果您知道所需文件的名稱,則可以在變量中設置該名稱,並將該規範設置爲等於Foreach循環容器表達式選項卡中的變量。如果您不知道確切的名稱,但知道命名約定或知道該文件夾中沒有其他文件,您也可以只指定一個目錄或部分文件名。

如果您想根據是否存在文件採取特定操作,則可以創建一個默認值爲0的變量,並在Foreach循環容器中創建一個腳本任務,以增加該變量。如果要執行每個單獨文件的存在,您也可以將這些命令放在要執行的Foreach循環容器中。如果你想根據缺少文件來採取行動,那麼你可以在Foreach循環容器之後限制你的優先約束,以便限制約束和表達式,並且檢查計數器變量是否大於0.

@拉傑的解決方案也可以用來增加變量。相反,使用的if else引發錯誤或成功的結果,你可以這樣做:

C#

if (System.IO.File.Exists("\\Server\Share\Folder\File.Ext")) 
{ Dts.Variables["my_case_sensitive_variable_name"].Value = Dts.Variables["my_case_sensitive_variable_name"].Value + 1; 
} 

VB.NET

If System.IO.File.Exists("\\Server\Share\Folder\File.Ext") Then 
    Dts.Variables["my_case_sensitive_variable_name"].Value = Dts.Variables["my_case_sensitive_variable_name"].Value + 1 
End If 

的這種方法的優點在沒有文件的情況下,包可能不需要失敗。如果文件發生變化,您也可以使用變量名稱,您可以將其定義爲包中的變量或僅在腳本任務中創建。 @ Raj的方法的唯一不足就是你必須知道你想檢查的文件名。

另一種可能性是執行文件系統任務以將文件重命名爲其現有名稱或將文件複製到其現有位置。如果該文件不存在,那麼您可以將錯誤路由到一個操作。我不推薦這種解決方案,但我記得幾年前在一個實際上有意義的實例中使用它。但在那個特殊的例子中,我實際上是把它複製到一個真實的位置。

祝你好運!

+0

我喜歡for循環的想法。 +1 – 2010-04-13 23:30:36