Comment puis-je transmettre le nom du travail SQL Server à une procédure stockée dans ce travail?

J'ai un travail:

RunProcedures

Il a des étapes:

Étape 1: Faire quelque chose
Étape 2: Faire quelque chose d'autre
Étape 3: Email

À l'étape 3, j'ai:

EXEC spSendSuccessEmail -- and here's where I want to pass the job name. 

Voici le code de la procédure stockée ci-dessus:

 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 = '[email protected]', @copy_recipients = '[email protected]', @subject = 'Process Complete', @body = @EmailBody, @importance = 'Normal', @sensitivity = 'Normal'; END TRY BEGIN CATCH EXEC spGetDatabaseErrorInfo END CATCH END 

Comment puis-je transmettre à cette procédure stockée le nom du travail dans lequel il se trouve?

Je lis sur les jetons, mais je suis un peu confus sur la façon d'accomplir cette tâche.

Quelqu'un peut-il me donner un coup de main?

MISE À JOUR J'ai fait quelques tests et pour certaines versions de SQL Server (2005 sp1 et au-delà), vous devrez échapper le Token. J'ai ajouté la command escape au code ci-dessous.

$ (JOBID) est le jeton que vous souhaitez utiliser et vous pouvez interroger msdb..sysjobs pour find le nom du travail.

Pour sql server 2005 sp1 et au-delà:

 declare @jobName varchar(100) select @jobName = name from msdb..sysjobs where job_id = $(ESCAPE_NONE(JOBID)) exec spSendSuccessEamil @jobName 

Pour SQL Server 2005 et versions antérieures:

 declare @jobName varchar(100) select @jobName = name from msdb..sysjobs where job_id = $(JOBID) exec spSendSuccessEamil @jobName 

Utilisez simplement l'un d'entre eux comme text de command dans la 3ème étape de votre travail.