1

すべて。

定義されたデータベースからデータをクエリし、それらを特定の場所のCSVファイルに配置するSSISパッケージを作成しました。次に、SSISパッケージ内で、指定したディレクトリにフォルダーを作成する事前に作成されたバッチファイルを呼び出し、フォルダーの名前を「yyyy-mm-dd」形式の日付に変更してから、作成したCSVファイルを新しく作成したCSVファイルに移動します。作成されたフォルダ。

次のようにファイルコードをバッチ処理します。

@echo off
FOR /F "TOKENS=1* DELIMS= " %%A IN ('DATE/T') DO SET CDATE=%%B
FOR /F "TOKENS=1,2 eol=/ DELIMS=/ " %%A IN ('DATE/T') DO SET mm=%%B
FOR /F "TOKENS=1,2 DELIMS=/ eol=/" %%A IN ('echo %CDATE%') DO SET dd=%%B
FOR /F "TOKENS=2,3 DELIMS=/ " %%A IN ('echo %CDATE%') DO SET yyyy=%%B
SET date=%date:~6,6%-%date:~3,2%-%date:~0,2%
md \\remote_folder\%date%
move /Y \\remote_folder\*.csv \\remote_folder\%date%
exit

これをSSISパッケージから実行すると、すべてが正常に機能します。

エージェントジョブを起動するサービスアカウントは、完全な管理制御を持っています。これをSQLServerエージェントを使用して自動化されたジョブとしてスケジュールすると、フォルダーが正しく作成されません。私の考えでは、SQLエージェントはバッチファイルの起動に問題があるか、互換性がありません。

他の誰かがこれに遭遇したか、回避策を知っていますか?

4

1 に答える 1

1

ファイルシステムタスクの使用:

RmtArchPath(文字列)という変数を作成します

次の式で値を設定します。

"\\\\ Remote_folder \\" +(DT_WSTR、4)YEAR(GETDATE())+ "-" + RIGHT( "0" +(DT_WSTR、2)MONTH(GETDATE())、2)+ "-" + RIGHT( "0" +(DT_WSTR、2)DAY(GETDATE())、2)+ "\\"

ファイルシステムタスクを作成します。操作には、ディレクトリの作成を選択します。UseDirectoryIfExistsの場合、Trueを選択します。IsSourcePathVariableには、RmtArchPathを選択します。

SrcFileName(文字列)という2番目の変数を作成します

ForEachLoopコンテナを作成します。コレクションには、列挙子「Foreach File Enumerator」を選択し、Folder = \\ Remote_Folderを設定し、files =*.csvを設定します。変数マッピングの場合、変数= User::SrcFileNameを設定します。

ファイルシステムタスクをループに接続します。(FSタスクからフロー方向のループまで)。

ループ内に2番目のファイルシステムタスクを作成します。

操作のためにファイルの移動を選択します。IsDestinationPathVariableをTrueに設定し、DestinationVariable=RmtArchPathを設定します。IsSourcePathVariable = Trueに設定し、SourceVariable=SrcFileNameに設定します。

于 2012-09-18T19:42:35.663 に答える