sqlagent 作业 - 使用系统文件夹路径和 CmdExec

g1g*_*1ga 5 sql-server

我正在尝试设置一个 SQL Server 代理作业,CmdExec用于在%programdata%\my company folder.

如果我使用%programdata%\my company\myexec.exe,该作业将失败,因为它显然找不到该文件。

但它适用于绝对路径:

C:\ProgramData\my company\myexec.exe
Run Code Online (Sandbox Code Playgroud)

如何使用特殊文件夹别名成功运行作业?

mrd*_*nny 5

SQL Agent 不会像那样执行命令。您需要编写一个包含系统变量的批处理文件,然后从 SQL 代理作业调用该批处理文件。如果系统变量实际上在代理作业步骤中,则它们不会得到解析。

  • 因为我说的原因。SQL 代理使用的 DLL 运行目录 %programfiles%。该命令是路径中的 dir,因此 SQL 代理可以很容易地找到它。那时它在 shell 中,操作系统将 %programfiles% 扩展为“c:\program files\”。另一方面,%programfiles%\some.exe 是实际的可执行文件,当 DLL 试图找到它时,它会失败,因为 DLL 无法将 %programfiles% 扩展为任何东西,因为它不理解变量。 (2认同)

小智 2

这取决于您用于 SQL Server 代理服务的帐户。

如果 %ProgramData% 是系统变量,则运行实例的服务器上的任何帐户都应该可以看到它。其中,用户变量是在其下配置的用户配置文件的本地变量。

编辑有关添加系统环境变量
的 SF 的好问题有一些关于如何将 %ProgramData% 添加到服务器的好信息。