如何将 SQL Server 作业名称传递给此作业中的存储过程?

RJ.*_*RJ. 2 sql t-sql sql-server token sql-job

我有工作:

运行程序

它有以下步骤:

第 1 步:做某事
第 2 步:做其他事
第 3 步:电子邮件

在第 3 步中,我有:

EXEC spSendSuccessEmail -- and here's where I want to pass the job name.
Run Code Online (Sandbox Code Playgroud)

下面是上面存储过程的代码:

ALTER PROCEDURE [dbo].[spSendSuccessEmail] @JobName VARCHAR(30)
AS 
BEGIN
    SET NOCOUNT ON;

    DECLARE @EmailBody VARCHAR(50)

    SET @EmailBody = @JobName + ' ran successfully'

    BEGIN TRY
        EXEC msdb.dbo.sp_send_dbmail 
            @profile_name = 'DBTeam',
            @recipients = 'user@universe.com',
            @copy_recipients = 'user2@universe.com',
            @subject = 'Process Complete',
            @body = @EmailBody,
            @importance = 'Normal',
            @sensitivity = 'Normal';
    END TRY
    BEGIN CATCH
        EXEC spGetDatabaseErrorInfo
    END CATCH           
END
Run Code Online (Sandbox Code Playgroud)

如何将其所在作业的名称传递给此存储过程?

我阅读了令牌,但我对如何完成此任务感到有些困惑。

谁能帮我一把?

Sli*_*345 5

更新 我做了一些测试,对于某些版本的 SQL Server(2005 sp1 及更高版本),您必须转义令牌。我已将转义命令添加到下面的代码中。

$(JOBID) 是您要使用的令牌,您可以从 msdb..sysjobs 中查询以查找作业名称。

对于 sql server 2005 sp1 及更高版本:

declare @jobName varchar(100)

select @jobName = name from msdb..sysjobs where job_id = $(ESCAPE_NONE(JOBID))

exec spSendSuccessEamil @jobName
Run Code Online (Sandbox Code Playgroud)

对于 sql server 2005 及更早版本:

declare @jobName varchar(100)

select @jobName = name from msdb..sysjobs where job_id = $(JOBID)

exec spSendSuccessEamil @jobName
Run Code Online (Sandbox Code Playgroud)

只需在工作的第 3 步中使用其中之一作为命令文本即可。