2016-05-03 25 views
1

我有一個ssis包,可以將文本文件導入到數據庫表中。導入文件名稱需要配置爲動態源,因爲文件名稱將會更改。所以我的文件名將有以下模式: bookNames_Shopping_05_02_2016.txt - > bookNames_Shopping_將常數但日期戳將更改sql服務器數據工具平面文件源的動態文件名

我設置了一個名爲的文件名,並且在連接管理器的屬性窗口中,我將ConnectionString屬性設置爲@ [User :: filename]。如何設置文件名變量以讀取連接管理器指向的文件夾中的文件名? P.S.我知道它可以在For Each循環內完成,但由於我沒有多個文件,但需要處理一個文件,所以我不想使用for each循環。該文件

完整路徑:\ XYZYUC3312B6 \ SHARE \界\ bookNames_Shopping_05_02_2016.txt

+0

所以你有一個動態文件名,但你不想爲每個文件枚舉器使用常見的習慣用法。我們可以假設最近修改過的文件是您正在尋找的文件嗎? – billinkc

+1

你說你不想使用ForEach - 但你不解釋爲什麼? ForEach是此要求的最佳解決方案。 – BIDeveloper

回答

3

應用循環的替代方法是使用表達式。假設正在讀取的單個文本文件在其名稱中包含這樣的SSIS包將處理它同日,你可以做到以下幾點:

  1. 創建一個名爲String類型的「文件名」用戶變量。
  2. 創建一個名爲「bookNames_Shopping」的新連接管理器,指向當前完整路徑「\ XYZYUC3312B6 \ SHARE \ Bound \ bookNames_Shopping_05_02_2016.txt」。
  3. 選擇剛剛創建的新連接管理器,然後打開它的解決方案資源管理器。
  4. 選擇表達式。當屬性表達式編輯器打開時,轉到屬性列並從下拉列表中選擇連接字符串。在同一行的Expression下的下一列中,選擇瀏覽按鈕。這將打開Expression Builder窗口。
  5. 在僅低於 「的表情:」 文本框中,輸入以下內容:

` 「\ XYZYUC3312B6 \ SHARE \界\」 + @ [用戶::文件名] + 「_」 +
RIGHT(「0」+(DT_STR,2,1252)DATEPART(「mm」,GETDATE()),2)+「_」+ RIGHT(「0」+(DT_STR,2,1252)DATEPART 「GETDATE()),2)+ 」_「 + (DT_STR,4,1252)DATEPART(」 YY 「GETDATE())+」 .TXT」

選擇在所述評估表達式按鈕左下方。如果這樣,它應該顯示完整的文件路徑,包括當前日期的連接。

\ XYZYUC3312B6 \ SHARE \界\ bookNames_Shopping_05_04_2016.txt

選擇OK按鈕,就這麼簡單。我在SQL Server 2008R2下的BIDS中運行它。如果您使用的是SQL Server 2012,那麼在Visual Studio 2010中,您可以直接爲FileName變量設置相同的表達式。

從這一點,只需在我們的數據流中應用bookNames_Shopping連接字符串即可。

+0

哈哈!抱歉 - 這是爲了反對原始問題!現在刪除。 – BIDeveloper

+0

沒問題。祝你有美好的一天。 – user3662215

+0

感謝用戶,,我將使用您的解決方案的變體。 - Matt –

2

我會用循環甚至一個文件,有沒有危害。另一種選擇是使用腳本任務和directoryinfo和fileinfo類。傳入目錄,如果希望在調用directoryinfo時將文件名的靜態部分用作文件掩碼。

+0

1.因此除了使用循環或通過腳本任務以外,沒有其他辦法可以使用嗎? 2.我是ssis/.net的noob,你能提供一個eg? 謝謝 –

+0

@DamonMatt有沒有業務規則,你沒有提到,這將有助於某人(SSIS)決定處理哪個文件?如果您的回覆是當前日期,如果過程在週末/假期失敗並且沒有人在第二天之前糾正,會發生什麼情況 - 那麼您會怎麼做?改變服務器的時間,使之成爲昨天? – billinkc

+0

@billinkc所有有效的問題法案,我現在還沒有全部答案。此時的假設是:1.每天將有一個文件,並且具有以下命名模式 - bookNames_Shopping_05_02_2016.txt,日期戳爲動態 2.只要我的包完成,它就會將文件移動到單獨的文件夾中 3.如果程序包失敗,這不是任務關鍵,有人會注意到,並提請我注意在修復問題後手動重新運行 因此,基本上在這一點上,我需要知道如何動態檢測帶有模式的文件,並將其存儲在變量中 - thx –