sp_stop_job (Transact-SQL)

適用於:SQL ServerAzure SQL 受控執行個體

指示 SQL Server Agent 停止執行作業。

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)會強制過早結束。 過早結束可能會導致無法預期的行為,例如開啟的處理程式正在使用的檔案。 因此,sp_stop_job只有在作業包含 CmdExecPowerShell 類型的步驟時,才應該在極端情況下使用。

此預存程式會與 Azure SQL 資料庫 的 Azure 彈性作業服務類似物件共享 的名稱sp_stop_job。 如需彈性作業版本的相關信息,請參閱 jobs.sp_stop_job (Azure Elastic Jobs) (Transact-SQL)

權限

此預存程式是由 db_owner 角色所擁有。 您可以授與 EXECUTE 任何用戶的許可權,但這些許可權可能會在 SQL Server 升級期間覆寫。

其他用戶必須在資料庫中獲得下列其中一個 SQL Server Agent 固定資料庫角色 msdb

  • SQLAgentUserRole
  • SQLAgentReaderRole
  • SQLAgentOperatorRole

如需這些角色權限的詳細資訊,請參閱 SQL Server Agent 固定資料庫角色

SQLAgentUserRole 和 SQLAgentReaderRole 的成員只能停止他們所擁有的作業。 SQLAgentOperatorRole 的成員可以停止所有本機作業,包括其他使用者所擁有的作業。 系統管理員的成員可以停止所有本機和多伺服器作業。

範例

下列範例會停止名為 Weekly Sales Data Backup的作業。

USE msdb;
GO

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