2011-12-08 55 views
0

好吧,我會盡力解釋我可以......非常特殊的情況。檢查多個文件

工具:SSIS 2008

我們現在必須由事件觸發控制流:一個或多個文件的存在。 (1,2或3)

使用的變量:

BO_FileLocation_1 
BO_FileLocation_2 
BO_FileLocation_3 
BO_FileName_1 
BO_FileName_2 
BO_FileName_3 

可以有一個,兩個或三個文件:在上述變量定義。當他們填寫時, 他們應該被處理。當它們爲空時,這意味着只有一個文件文件,該進程應忽略它們並跳轉到下一個(文件監視器?)任務。 例如:

BO_FileLocation_1= "C:\" 
BO_FileLocation_2 NULL 
BO_FileLocation_3 NULL 
BO_FileName_1= "test.csv" 
BO_FileName_2 NULL 
BO_FileName_3 NULL 

該報告只需要一個文件。

我需要一個通用的概念,檢查這些文件的存在,它可能比我的SSIS知識現在可以處理更通用。例如,如果將來有第四個文件,方便使用。我也在想用一個腳本來處理所有的邏輯。

在此先感謝

一個可能無關緊要的圖像: enter image description here

+0

這是一個精確的總結:什麼是在運行數據流之前確保存在N個文件的通用方法? – billinkc

回答

1

如果你想要的是觸發Copy Source File to handle如果一個或多個文件的存在,只是使用或約束你的流量。下圖顯示瞭如何:

首先連接到目標: Original layout

然後點擊綠色箭頭之一。這會使其屬性窗口彈出。選擇Logical OR代替Logical ANDprecedence constraint properties

如果一切順利的話,你現在應該看到的連接爲虛線:

final look

+0

我不認爲這是一個可行的解決方案,如上所述。如果業務需求是在導入所有可用文件後「做某事」,這將違反業務規則。只要導入至少一個文件,它就會簡單地啓動「執行某些」命令。此外,如果任務完成並且沒有文件,它將運行「執行某些操作」。 –

+0

從我讀到的問題中,它只需要正確導入其中一個文件。但我可能誤解了它。 – cfrag

+0

謝謝你們,我感謝你們的解決方案:我認爲我會遵循優先權限制的任務。 (應該考慮到這一點!但是,嘿,探索SSIS的任務/可能性) – laurens

1

有幾種可能的解決方案:

  1. 創建一個序列容器並將所有文件導入包括在序列容器中。爲RowCountFile1,RowCountFile2和RowCountFile3添加int變量並將該值設置爲0(這是創建int變量時的默認值)。爲每個數據流添加一個RowCount轉換。從序列容器創建優先約束到「執行某些任務」任務。將優先約束設置爲成功和表達式。將表達式值設置爲@ RowCountFile1> 0 || @ RowCountFile2> 0 || @ RowCountFile3> 0.此方法的優點是,您可以在檢測到文件後立即採取措施,導入所有可用文件,並且只有在導入所有文件後才執行操作。然後,您可以安排將此SSIS包作爲SQL Server代理作業步驟運行,並按需要頻繁運行。

  2. 解決方案1的一個變體是用於序列容器內的每個文件枚舉器容器。如果您不知道文件的確切名稱,並且您希望在某些情況下導入多個文件,這將非常有用。例如,如果每隔幾分鐘就會在文件名中使用時間戳文件獲取文件,並且由於某種原因您的進程無法運行,那麼您可能需要處理多個文件才能趕上,然後一旦執行就採取行動完成。

  3. 您可以像您在問題中概述的那樣使用文件觀察器任務。我對文件觀察器任務的唯一問題是包必須處於持續運行狀態。這使得難以解決問題和性能。它還可以引入其他問題,因爲我記得幾年前在文件觀察器任務出現時遇到了一些問題。現在這可能是一個完全穩定的任務,但是在之前被燒燬之後,我更喜歡其他方法來完成任務。如果你真的想要包持續運行而不是被作業調用,那麼你總是可以使用腳本任務來檢查文件,如果沒有找到睡眠線程,再次檢查等等。我確定這就是文件守望者任務,但我會相信我自己的C#的任務。給任何有比我更好的使用File Watcher的經驗的人的力量...

  4. 使用PowerShell。如果只是在文件出現時才採取措施,而您並未導入數據,那麼PowerShell腳本可以像SSIS包一樣執行此操作。缺點是你必須學習一些基本的PowerShell,因爲PowerShell可能不是你的麪包和黃油核心語言,所以今後可能很難維護,並且如果你想要的話你可能需要重新將代碼重寫爲SSIS包導入數據。您可能會從SQL Server代理作業步驟調用PowerShell腳本,因此可以非常輕鬆地處理計劃。

有比我列出的選項更多的選項,所以讓我知道如果你還想要更多的建議。

+0

謝謝你們我感謝你們的解決方案:我想我會遵循優先限制任務。 (應該想到這個!但是,嘿,探索SSIS的任務/可能性) – laurens