我找到了一份工作:
RunProcedures
它有步骤:
第1步:做某事 第2步:做点别的事 第3步:发送电子邮件
在第3步中,我有:
EXEC spSendSuccessEmail -- and here's where I want to pass the job name.
以下是上述存储过程的代码:
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
如何将此作业的名称传递给此存储过程?
我阅读了令牌,但我对如何完成这项任务感到有些困惑。
任何人都可以帮我一把吗?
答案 0 :(得分:4)
<强>更新强> 我做了一些测试,对于某些版本的SQL Server(2005 sp1及更高版本),你将不得不逃避令牌。我已将escape命令添加到下面的代码中。
$(JOBID)是您要使用的token,您可以从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
对于sql server 2005及更早版本:
declare @jobName varchar(100)
select @jobName = name from msdb..sysjobs where job_id = $(JOBID)
exec spSendSuccessEamil @jobName
只需在工作的第3步中使用其中一个作为命令文本。