[英]SSIS - Dynamic File Name for FTP Component
我正在嘗試在SSIS中創建數據流,以幫助我通過FTP上傳文件,但遇到了一些麻煩。 文件名必須是動態的,格式為filename_mmddyy.xls。 因此,它每天都會應用日期並上傳新文件。
我能夠做到這一點,以便文件可以使用以下表達式正確保存在數據流中:
@[User::path]+
Right("0"+(DT_STR,4,1252)DatePart("m",getdate()),2)+
Right("0"+(DT_STR,4,1252)DatePart("d",getdate()),2)+
Right("0"+(DT_STR,4,1252)DatePart("yyyy",getdate()),2)+
".xls"
但是,FTP組件不會將此作為LocalPath的表達式。 我試圖在原始數據流中的腳本組件內部覆蓋User :: path變量,但這似乎也不起作用。
我知道我在每一個簡單的事物上都缺少一些東西,但是我盯着它看了足夠長的時間,而且它只是沒有出現在我身上。
謝謝!
編輯
好吧,所以在閑逛了一天之后,我想出了以下幾點:
我完成了創建平面文件的原始任務。 旁注,我的供應商實際上需要一個真正的excel xls而不是一個csv,因此我必須創建一個文件連接目標,然后需要我在服務器上創建一個靜態文件。
然后,我使用腳本任務(C#)將靜態文件復制到具有動態名稱的文件中。 當然,我必須保留原始文件,因為excel目標位置必須在該文件中。
最后,我建立了另一個文件連接,並使用上面的表達式作為連接字符串。 然后,我有FTP任務使用文件連接作為要上傳的文件。
我將嘗試將其修整一下。 我想我可以不使用腳本任務而不是使用文件系統任務來復制並使用文件連接來幫助獲得動態路徑名。
我了解的底線是:在SSIS中,當它說“ PathIsVariable”時,您在該文本字段中輸入的內容將被視為變量。 因此,如果我輸入@ [User :: path],它將解析為“ C:\\ pathonmydrive”。 然后,SSIS查找具有該名稱的變量,即C:\\ pathonmydrive,以查找文件。 這有點違反直覺,但現在我知道我可以避免這種陷阱。
EvaluateAsExpression
設置為true。 @[User::path] + "filename_" + Right("0"+(DT_STR,2,1252)DatePart("m",getdate()),2) + Right("0"+(DT_STR,2,1252)DatePart("d",getdate()),2)+ Right("0"+(DT_STR,4,1252)DatePart("yy",getdate()),2) + ".xls"
Evaluate Expression
按鈕查看表達式是否解析文件的正確路徑。 FTP task
的Expressions
屬性,並設置在LocalPath
下創建的變量。 為了在腳本組件內部更改變量值,您需要首先將變量作為ReadWrite傳遞:
然后,為變量設置一個新值:
Dts.Variables["folders"].Value = "value you want to assign";
創建一個新變量,例如FilePath
。 使用字符串作為數據類型,並在變量的屬性中,將EvaluateAsExpression
設置為true。 配置變量的表達式:
@[User::path] + "filename_" + Right("0"+(DT_STR,2,1252)DatePart("m",getdate()),2) + Right("0"+(DT_STR,2,1252)DatePart("d",getdate()),2)+ Right("0"+(DT_STR,4,1252)DatePart("yy",getdate()),2) + ".xls"
使用表達式編輯器中的“評估表達式”按鈕查看表達式是否解析文件的正確路徑。
修改FTP任務的Expressions屬性,並設置在LocalPath下創建的變量。
我已經以上述方式執行,但是仍然有問題The variable cannot be found
...任何想法
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.