如何在SQL代理作业中成功运行批处理文件?

时间:2013-02-25 16:07:10

标签: sql-server-2008 batch-file jobs sql-agent

亲爱的Stackoverflow用户,

我有一个SQL代理作业,它以PDF文件格式生成特定报告,然后将PDF复制到网络目录,然后删除源目录中的PDF文件。

SQL作业包含两个步骤: 1.生成报告 2.将报告复制到网络位置。

对于第2步,我制作了一个bat文件,用于处理pdf文件的复制和删除。

bat文件如下:

set source_dir=C:\Reports\Energie\Uur
set dest_dir=\\KWS2-WEB-SERVER\Share\Reports\Uur

C:\Windows\System32\Robocopy.exe %source_dir% %dest_dir% /MOV /Z

但是,当我运行我的作业时,它会挂起第二步。状态只停留在“正在执行”。

这是我在步骤中说明的行(要执行的bat文件的位置):

cmd.exe /c "C:\Reports\rapport_uur_copy.bat"

我的工作设置如下:

第1步

类型:操作系统(CmdExec) 成功:转到下一步

失败时:退出作业报告失败

第2步

类型:操作系统(CmdExec)

成功:退出工作报告成功

失败时:退出作业报告失败

一些事实:

  • 我对网络目录有读/写权限
  • 我以管理员帐户(登录用户,默认)
  • 运行这些步骤
  • 第1步成功
  • 我运行Windows Server 2008 R2 Standard
  • 我有SQL Server 2008 R2
  • 当我手动从cmd运行脚本时,它可以正常运行(在管理员帐户下)。

提前致谢!

1 个答案:

答案 0 :(得分:3)

当批处理脚本需要使用非本地驱动器时,例如共享它总是需要特殊权限,意味着you need to use an account to run the script which is allowed to log on as batch task in secpol - (单击启动类型secpol.msc并启动它 - 在MSC管理单元中选择“本地策略” - 选择“用户权限分配” - 右键单击​​“以批处理作业登录”并选择“属性” - 单击“添加用户或组”,然后包括相关用户。)

在正常批次中也无法使用\\drives,它们必须被映射为具有char的驱动器,例如V:\drive此映射got to be made by the batch itselfuser account used running the batch我在我的脚本中遇到过这种情况。