Transact-SQL 参考

sp_stop_job

命令 SQLServerAgent 停止执行作业。

语法

sp_stop_job [@job_name =] 'job_name'
    
| [@job_id =] job_id
    | [@originating_server =] 'master_server'
    
| [@server_name =] 'target_server'

参数

[@job_name =] 'job_name'

是要停止的作业名。job_name 的数据类型是 sysname,默认设置为 NULL。

[@job_id =] job_id

是要停止的作业标识号。job_id 的数据类型是 uniqueidentifier,默认设置为 NULL。

[@originating_server =] 'master_server'

是主服务器名。如果指定,则停止所有的多服务器作业。master_server 的数据类型是 nvarchar(30),默认设置为 NULL。只有在目标服务器上调用 sp_stop_job 时才指定该参数。

说明  只能指定前三个参数之一。

[@server_name =] 'target_server'

是要停止多服务器作业的特定目标服务器名。target_server 的数据类型是 nvarchar(30),默认设置为 NULL。只有在主服务器上对多服务器作业调用 sp_stop_job 时才指定该参数。

返回代码值

0(成功)或 1(失败)

结果集

注释

如果作业当前正在执行 CmdExec 类型的步骤,则将强行过早结束正在运行的进程(如 MyProgram.exe)。过早结束会导致不可预知的行为,如进程正在使用的文件保持打开。因此,如果作业包含 CmdExec 类型的步骤,应该只在没有办法的情况下才使用 sp_stop_job

权限

执行权限默认授予 msdb 数据库中的 public 角色。可执行此存储过程而且是 sysadmin 固定角色成员的用户可以停止任何作业。不是 sysadmin 角色成员的用户使用 sp_stop_job 只能停止他/她所拥有的作业。

sysadmin 固定服务器角色成员的用户唤醒调用 sp_stop_job 时,sp_stop_job 将在 SQL Server 服务正在其中运行的安全上下文中执行。当用户不是 sysadmin 组的成员时,sp_stop_job 将模拟 SQL Server 代理代理帐户,而该帐户是通过 xp_sqlagent_proxy_account 指定的。如果代理帐户不可用,则 sp_stop_job 将失败。只有 Microsoft® Windows NT® 4.0 和 Windows 2000 有上述情况。在 Windows 9.x 上没有模拟,而且 sp_stop_job 总是在启动 SQL Server 的 Windows 9.x 用户的安全上下文中执行。

示例

下例停止名为 Archive Tables 的作业。

USE msdb
EXEC sp_stop_job @job_name = 'Archive Tables'

请参见

sp_delete_job

sp_help_job

sp_start_job

sp_update_job

系统存储过程