sp_stop_job (Transact-SQL)
适用于: SQL Server Azure SQL 托管实例
指示SQL Server 代理停止执行作业。
语法
sp_stop_job
[ [ @job_name = ] N'job_name' ]
[ , [ @job_id = ] 'job_id' ]
[ , [ @originating_server = ] N'originating_server' ]
[ , [ @server_name = ] N'server_name' ]
[ ; ]
参数
[ @job_name = ] N'job_name'
要停止的作业的名称。 @job_name为 sysname,默认值为 NULL
.
[ @job_id = ] 'job_id'
要停止的作业的标识号。 @job_id是 uniqueidentifier,默认值为 NULL
.
[ @originating_server = ] N'originating_server'
发起服务器的名称。 如果指定主服务器的名称,则将停止所有多服务器作业。 @originating_server为 sysname,默认值为 NULL
. 仅在目标服务器上调用 sp_stop_job
时指定此参数。
Azure SQL 托管实例不支持多服务器管理(MSX/TSX)功能。
注意
只能指定前三个参数之一。
[ @server_name = ] N'server_name'
要在其上停止多服务器作业的特定目标服务器的名称。 @server_name为 sysname,默认值为 NULL
. 仅在对多服务器作业的发起服务器调用 sp_stop_job
时指定此参数。
返回代码值
0
(成功)或 1
(失败)。
结果集
无。
注解
sp_stop_job
向数据库发送停止信号。 某些进程可以立即停止,有些进程必须到达稳定的点(或代码路径的入口点),然后才能停止。 一些长时间运行的 Transact-SQL 语句,例如BACKUP
RESTORE
,某些DBCC
命令可能需要很长时间才能完成。 当这些命令正在运行时,可能需要一段时间才能取消作业。 停止作业导致在作业历史记录中记录“作业已取消”项。
如果作业当前正在执行 CmdExec 或 PowerShell 类型的步骤,则运行的进程(例如,MyProgram.exe)被迫过早结束。 提前结束可能导致不可预知的行为,如进程正在使用的文件保持为打开状态。 因此,仅当作业包含 CmdExec 或 PowerShell 类型的步骤时,sp_stop_job
才应在极端情况下使用。
此存储过程与用于Azure SQL 数据库的 Azure 弹性作业服务的类似对象共享名称sp_stop_job
。 有关弹性作业版本的信息,请参阅jobs.sp_stop_job(Azure 弹性作业)。
权限
此存储过程由 db_owner 角色拥有。 你可以为任何用户授予 EXECUTE
权限,但这些权限可能会在 SQL Server 升级期间被重写。
其他用户必须被授予数据库中以下SQL Server 代理固定数据库角色msdb
之一:
- SQLAgentUserRole
- SQLAgentReaderRole
- SQLAgentOperatorRole
有关这些角色的权限的详细信息,请参阅 SQL Server 代理固定数据库角色。
SQLAgentUserRole 和 SQLAgentReaderRole 的成员只能停止他们拥有的作业。 SQLAgentOperatorRole 的成员可以停止所有本地作业,包括其他用户拥有的作业。 sysadmin 的成员可以停止所有本地和多服务器作业。
示例
以下示例将停止一个名为 Weekly Sales Data Backup
的作业。
USE msdb;
GO
EXEC dbo.sp_stop_job N'Weekly Sales Data Backup';
GO