FTP経由でファイルをアップロードできるように、SSISでデータフローを作成しようとしていますが、少し問題があります。ファイルの名前は、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 変数を上書きしようとしましたが、うまくいかないようでした。
私は何かが欠けていることを知っています。
ありがとう!
編集
わかりましたので、別の日にふざけた後、ここに私が思いついたものがあります:
フラットファイルを作成するという独自のタスクを作成しました。補足として、私のベンダーは実際には csv ではなく真の Excel xls を必要としていたため、ファイル接続先を作成する必要があり、サーバー上に静的ファイルを作成する必要がありました。
次に、スクリプト タスク (C#) を使用して、静的ファイルを動的な名前のファイルにコピーしました。もちろん、Excel の宛先には元のファイルが必要なので、元のファイルを残す必要があります。
最後に、別のファイル接続を作成し、上記の式を接続文字列として使用しました。次に、FTP タスクでファイル接続をアップロードするファイルとして使用します。
全体を少し削ってみます。スクリプト タスクを使用せずに、代わりにファイル システム タスクを使用してコピーし、ファイル接続を使用して動的パス名を支援することで解決できると思います。
私が学んだ結論は次のとおりです。SSISでは、「PathIsVariable」と表示されている場合、そのテキストフィールドに入力したものは変数として解釈されます。したがって、@[User::path] を入力すると、「C:\pathonmydrive」に解決されます。次に、SSIS はその名前の変数 (C:\pathonmydrive など) を探してファイルを見つけます。少し直感に反していますが、今ではその落とし穴を回避できることがわかりました。