2017-03-09 40 views
1

我使用SQL Server 2016,我有一個SSIS包,其中我創建了一個FlatFile,其中dynamic Name在Loop中的一個DataFlow中。當它具有動態名稱時,如何在SSIS中刪除ControlFlow中的FlatFile?

爲了創建我已經使用這個pathern名稱: 「SomeText」 則會+ DateTime + 「SomeText」 則會

enter image description here

我已經創建了一個varibale像下面圖片:

enter image description here

這是我的變數中的驚喜:

enter image description here

然後我就分配這個變量來我FLATFILE目的地的ConnectionString屬性是這樣的:在DataFlow

enter image description here

在某些情況下,我沒有數據,我創建一個空文件,但我需要刪除這個文件,當它是空的。正因爲如此,我創建了一個變量,我用RowCount Component來填充這個變量。

enter image description here

後,在Control Flow,我已經把一個File System Task刪除該文件,如果我的變量是0。(我的循環是基於對象)

enter image description here

但是我有一個問題,在DataFlow,當我想刪除該文件時,FlatFile的名稱將被更改,並且我找不到在DataFlow中創建的同一個文件。

問題是當我想使用變量時,變量的值將在第二次變化。

如何刪除已在DataFlow中動態創建的Control Flow中的Flat File

+0

存儲在一個變量的動態域名,那麼你就會有它的任何地方 – FLICKER

+0

@FLICKER動態名稱現在是在變,但我有這個問題。每次我們想要讀取變量的值時,它都會被初始化,並且由於日期時間部分而需要新值 –

+0

請告訴我們您在何處/如何設置與數據流任務相關的文件名變量。如果它具有適當的範圍(包級別),則不必重新初始化該變量。 – JiggsJedi

回答

2

您需要使用腳本任務來設置變量值,而不是表達式生成器。

由於您在表達式生成器中使用日期/時間,所以它會不斷變化。使用腳本任務將允許您在循環迭代時捕獲/存儲日期/時間值,並將該值永久存儲在整個循環中。

此腳本任務通常位於循環的頂部(第一個),它會在每次迭代時設置/更改文件名。

這裏是如何做到這一點的例子: https://microsoft-ssis.blogspot.ca/2010/12/how-to-use-variables-in-script-task.html

如果你正在被使用在文件名數據流內的值,那麼你可能需要使用腳本組件(改造)來更新數據流中的文件名。

這裏是如何做到這一點的例子:https://microsoft-ssis.blogspot.ca/2011/01/how-to-use-variables-in-script.html

0

把這個刪除步驟放在每個循環中。帶有通配符文件名掩碼的Foreach File Enumerator。 For each

與輸出字符串變量,這將是文件名,它的發現,你可以把你刪除變量

+0

我沒有在文件夾中的foreach。我的每個人都在一個物體上。在我的數據流的內部,我創建了具有動態名稱的平面文件。然後如果文件是空的,我想刪除我的文件,但我不知道什麼是文件的名稱。 –

相關問題