2012-11-15 217 views
0

快速介紹到現有的流程:一個SSIS foreach循環導入一個平面文件到SQL Server表通過尋找在進入路徑文件夾的任何文本文件,在導入後它將平面文件轉儲到一個存檔文件夾中。發生這種情況總共有四個平面文件,因爲它只查找任何文本文件,所以沒有問題。SSIS&MS SQL服務器:解析文本從文件名

然而,提出了新的想法相反,SSIS應該運行的第一個捕獲關閉文本文件的日期和國家(從文件名,而不是裏面的文件)的過程,然後沿着插入數據到SQL Server與捕獲的狀態和日期,然後存檔文件。這背後的想法是,如果一個日期比一個月落後或者提前一個月,SSIS將不會導入該文件(或者如果年份錯了,則不會導入)。

所以現在 - SSIS首先需要檢查,看看是否存在四個文件。 - 如果有四個文件存在,那麼它會進入foreach循環(至少,我猜這是解決這個問題的最好方法)。 - 在每個循環中,進程需要從文件名解析日期和狀態,並且需要將數據導入SQL Server,並將日期和狀態添加到適當的列中。 - 然後它需要歸檔該文件並轉到下一個文件。

我從來沒有做過任何分析,我試圖用表情和連接字符串玩弄搜索當前月份和年份,但沒有運氣。

(最後,我所知甚少C#,所以腳本任務是我的聯賽)。

回答

0

忘記而我的解決辦法:不使用任何C#或VB,我找到了一種方法來插入文件名到一個表,並使用TSQL解析文件名。使用「執行SQL任務」您可以使用下面這個SQL語句:

INSERT INTO Table VALUES (?) 

隨着項目設置爲當前文件的名稱的字符串變量,你將設置在「參數映射」。從那裏,你將有一個完整的文件名在SQL表中,並可以解析它。

1

SSIS表達式可能不是這份工作的正確工具。

我就會想一個腳本任務 - 我堅持用VB我覺得這更易讀,並達到相同的結果。這將釋放美麗的Try .. Catch塊和令人難以置信的豐富的.NET庫,例如常用表達。你永遠不會回頭。

2

我沒有看到這種情況沒有腳本組件。如果是這樣,解決方案將是一堆凌亂的表情。

您可以在vb.net或c#中執行腳本組件。熟悉system.IO命名空間。 Directory.GetFiles()方法將返回給定目錄中的所有文件。您可以執行For Each循環並解析每個文件名。

如果您對SSIS非常認真,您需要熟悉腳本組件(包括讀取和寫入變量),system.io命名空間以及如何逐步瀏覽組件代碼以探索屬性。我很少創建一個不涉及編程訪問文件系統的包,無論是解析文件名,讀取文件,移動文件還是刪除文件。這可以用sys.io來完成。

+0

這就是我害怕的,但是,我一直在努力學習一些OOP編程。我會看看是否有其他建議。 – Kprof

+1

這將大大增加您可以執行的任務範圍。這並不像你想象的那麼困難。以下是如何在腳本組件中移動和重命名文件的示例:http://consultingblogs.emc.com/jamiethomson/archive/2005/09/14/SSIS-Nugget_3A00_-Move-and-rename-a-file- in-one-operation.aspx即使包含錯誤處理,也只有6行代碼。 – brian

+0

我同意Brian的觀點......我是一位實習生,擁有3個月的ssis經驗,但是1年c#經驗......我的OOP經驗讓我在SSIS中更加高效高效。 –