2013-06-05 54 views
0

我有一項複雜的任務,需要完成。它之前運行良好,因爲只有一個文件,但現在正在改變。每個文件都有一個首行批量插入暫存表的長行。從這裏我應該將文件名保存到另一個表中,然後插入暫存表數據的分解部分。這不是問題。我們可能只有一個文件或甚至多個文件一次加載。需要發生的事情是:SSIS - 加載平面文件,將文件名保存到SQL表

  1. 第一個SSIS任務是執行一些檢查的腳本任務。第二項任務準備文件列表。
  2. 登臺表被截斷。
  3. 第三項任務目前是從文件列表中使用的文件並處理它Foreach循環容器任務:
    • 文件加載到使用大容量插入任務表。
    • 文件名需要作爲變量傳遞給下一個進程。這是通過C#任務完成的,但現在有點複雜,因爲可能有多個文件,每個文件名需要單獨保存。
    • 最後一項任務是執行存儲過程並將文件名作爲輸入變量的SQL任務。

我的問題是,之前它只是一個文件。這很容易。現在最好的辦法是什麼?

回答

1
  1. 在導入文件的數據流任務中創建一個Π列。使用文件名的系統變量值填充它。將文件名加載到同一個表中。

  2. 使用執行SQL任務將文件名的distinc列表檢索到記錄集(對象類型變量)中。

  3. 用於每個循環容器循環訪問記錄集。將您的代碼放入容器中。代碼將從循環中接收文件名作爲變量的值並處理文件。

  4. 使用在For Each Loop容器中執行SQL任務以調用SP。通過文件名作爲參數,如:

    Exec sp_MyCode param1,param2,?

哪裏?將通過文件名輸入作爲一個字符串

編輯

爲了使平面文件連接拿起一個變量指定的文件 - 使用平面文件連接的連接字符串屬性

  1. 選擇FF連接,右鍵單擊並選擇屬性

  2. 單擊表達式的空字段,然後單擊出現的省略號。使用表達式,您可以使用變量定義列表中的對象的每個屬性。 SSIS中的許多對象都可以指定表達式。

  3. 添加一個表達式,選擇連接字符串屬性並定義一個帶有文件絕對路徑的表達式(僅僅爲了安全起見,它也可以是UNC路徑)。

+0

好的,我已經完成了派生列。我可以獲取文件名,將其保存到列中等。我只是在使用現在用於數據流任務的平面文件部分的文件連接管理器。有什麼方法可以使用變量告訴它在完成當前的文件後轉到下一個文件?即它似乎很難編碼,目前只處理一張桌子,我不知道如何解決這個問題。 –

+0

處理一個文件,我的意思是說,對不起! –

+0

沒關係!它正在工作。非常感謝你的幫助! –

0

以上所有內容都可以在腳本任務本身使用C#代碼完成。您可以逐個循環遍歷所有文件: 1.批量將數據複製到登臺 2.將文件名插入另一個表

您可以根據您的要求和期望修改邏輯執行流程。

0

添加colunm到您的臨時表 - 文件名 捕獲的文件名中(使用表達式),然後運行像這樣每個迴路一個SSIS變量:

UPDATE StagingTable SET FileName=? WHERE FileName IS NULL 

你爲什麼用C#搞亂?從你的描述來看,這完全沒有必要。

相關問題