2

仕事があります:

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

このストアド プロシージャにジョブの名前を渡すにはどうすればよいですか?

私はトークンを読みましたが、このタスクを達成する方法について少し混乱しています。

誰か手を貸してくれませんか?

4

1 に答える 1

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

SQL Server 2005 以前の場合:

declare @jobName varchar(100)

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

exec spSendSuccessEamil @jobName

これらのいずれかを、ジョブの 3 番目のステップ内でコマンド テキストとして使用するだけです。

于 2012-10-03T17:11:25.127 に答える