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

Naz*_*eem 5 sql-server-2008 sql-server-agent jobs

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

SQL 作业包括 2 个步骤: 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
Run Code Online (Sandbox Code Playgroud)

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

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

cmd.exe /c "C:\Reports\rapport_uur_copy.bat"
Run Code Online (Sandbox Code Playgroud)

我的工作设置如下:

第1步

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

On Failure:退出作业报告失败

第2步

类型:操作系统 (CmdExec)

成功时:辞职报告成功

On Failure:退出作业报告失败

一些事实:

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

小智 3

看起来您需要将作业的第二步配置为以域帐户身份运行,该帐户具有写入\KWS2-WEB-SERVER\Share\Reports\Uur共享的权限以及对C:\Reports\的读取权限Energie\Uur文件夹。

您首先需要向 SQL Server 添加凭据。在“安全”>“凭据”文件夹中,您需要右键单击并选择“新建凭据...”,填写该信息并单击“确定”。

完成后,您将需要创建一个使用此凭据的代理。在SQL Server 代理 > 代理 > 操作系统 (CmdExec)文件夹中,您需要右键单击并选择新建代理...使用您之前创建的凭据。

现在,您可以配置第二个作业步骤以使用您刚刚使用作业步骤页面的“运行方式:”下拉列表创建的代理。