1

全部。

我编写了一个 SSIS 包,它从定义的数据库中查询数据并将它们放入特定位置的 CSV 文件中。然后,在 SSIS 包中,我调用了一个预先编写的批处理文件,它在指定目录中创建一个文件夹,将文件夹重命名为“yyyy-mm-dd”格式的日期,然后将创建的 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 包运行它时,一切正常。

触发代理作业的服务帐户具有完全的管理控制权。使用 SQL Server 代理将其安排为自动作业时,该文件夹未正确创建。我的想法是 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 的变量(字符串)

创建一个 ForEachLoop 容器。对于 Collection,选择枚举器“Foreach File Enumerator”,设置文件夹 = \\Remote_Folder,设置文件 = *.csv。对于变量映射,设置变量 = User::SrcFileName。

将文件系统任务连接到循环。(从 FS 任务到流向的循环)。

在循环内创建第二个文件系统任务。

选择移动文件进行操作。将 IsDestinationPathVariable 设置为 True,设置 DestinationVariable = RmtArchPath。设置 IsSourcePathVariable = True,设置 SourceVariable = SrcFileName。

于 2012-09-18T19:42:35.663 回答