2012-09-17 37 views
1

全部。批处理文件通过SQL Server代理故障

我写了一个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代理无法启动批处理文件,或者它们不兼容。

是否有其他人遇到过这种情况或知道解决方法?

+0

是否找到批处理文件? – Sam

+0

是的,但批处理文件在通过代理运行时不正确地创建文件夹。当我说“不正确”时,我的意思是创建的文件夹可以标注为“12”,然后创建一个标记为“09”的子文件夹,然后在之前创建的标记为“18”的子文件夹内创建另一个子文件夹。 – prevynjeftha

+0

你是指什么文件夹被命名?在Windows批处理脚本中,我不是那么棒。作为另一种选择,你可以在PowerShell中做到这一点;) – Sam

回答

1

使用文件系统任务:

创建一个名为RmtArchPath(串)

设置与表达式的值变量:

“\\\\ Remote_folder \\” +(DT_WSTR ,4)YEAR(GETDATE())+“ - ” + RIGHT(“0”+(DT_WSTR,2) 2)DAY(GETDATE()),2) +“\\”

创建文件系统任务。对于操作选择创建目录。对于UseDirectoryIfExists选择True。对于IsSourcePathVariable,请选择RmtArchPath。

创建名为SrcFileName(字符串)

创建foreach循环容器中的第二变量。对于Collection,选择枚举器“Foreach File Enumerator”,设置Folder = \\ Remote_Folder,设置files = * .csv。对于变量映射,设置变量= User :: SrcFileName。

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

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

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

+0

太棒了!谢谢! – prevynjeftha