sp_stop_job (Transact-SQL)

适用于:SQL ServerAzure SQL 托管实例

指示SQL Server 代理停止执行作业。

Transact-SQL 语法约定

语法

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 语句,例如BACKUPRESTORE,某些DBCC命令可能需要很长时间才能完成。 当这些命令正在运行时,可能需要一段时间才能取消作业。 停止作业导致在作业历史记录中记录“作业已取消”项。

如果作业当前正在执行 CmdExecPowerShell 类型的步骤,则运行的进程(例如,MyProgram.exe)被迫过早结束。 提前结束可能导致不可预知的行为,如进程正在使用的文件保持为打开状态。 因此,仅当作业包含 CmdExecPowerShell 类型的步骤时,sp_stop_job才应在极端情况下使用。

此存储过程与用于Azure SQL 数据库Azure 弹性作业服务的类似对象共享名称sp_stop_job。 有关弹性作业版本的信息,请参阅jobs.sp_stop_job(Azure 弹性作业)(Transact-SQL)。

权限

此存储过程由 db_owner 角色拥有。 你可以为任何用户授予 EXECUTE 权限,但这些权限可能会在 SQL Server 升级期间被重写。

其他用户必须被授予数据库中以下SQL Server 代理固定数据库角色msdb之一:

  • SQLAgentUserRole
  • SQLAgentReaderRole
  • SQLAgentOperatorRole

有关这些角色的权限的详细信息,请参阅 SQL Server 代理固定数据库角色

SQLAgentUserRoleSQLAgentReaderRole 的成员只能停止他们拥有的作业。 SQLAgentOperatorRole 的成员可以停止所有本地作业,包括其他用户拥有的作业。 sysadmin 的成员可以停止所有本地和多服务器作业。

示例

以下示例将停止一个名为 Weekly Sales Data Backup 的作业。

USE msdb;
GO

EXEC dbo.sp_stop_job N'Weekly Sales Data Backup';
GO