0

私のコードは、ジョブが失敗したことを認識し、電子メールを送信し、リンクされたデータベースにあるストアド プロシージャを使用してチケット システムを更新するトリガーを持つことです。

メール送信部分は完璧に機能しますが、チケット手順コードを追加するとメールが送信されず、チケットが開かれず、msdb.dbo.sysjobhistory にあるはずの特定の行が実際にはありません。挿入に失敗したり、行削除されました。

プロシージャ コード行自体は正常に動作し、トリガー部分なしで同じコードを実行すると、正常に動作します。

コードはトリガーの外でも問題なく動作するため、トリガーの動作方法に関して何かが欠けていると思います。

    alter TRIGGER trig_open_ticket_failed
ON msdb.dbo.sysjobhistory
after INSERT
AS begin
 DECLARE @MaxInstance int
Declare @failedFlag int
Declare @JobName varchar(50)
Declare @ErrorInfo varchar(max)
Declare @stepName varchar(50)
set @MaxInstance= (select MAX(instance_id) 
    from msdb.dbo.sysjobhistory
    )



 select top 1 @failedFlag = hs.run_status, @stepName=hs.step_name
 from msdb.dbo.sysjobhistory hs join msdb.dbo.sysjobs sj
 on hs.job_id=sj.job_id
 where instance_id= @MaxInstance

 if @failedFlag=0 
 BEGIN


SELECT TOP 1 @JobName= 'LKSQL job failed:' + SJ.name, @ErrorInfo=hs.message
 from msdb.dbo.sysjobhistory hs join msdb.dbo.sysjobs sj
on hs.job_id=sj.job_id
where instance_id= @MaxInstance 
set @errorInfo= 'Job: '+ @JobName +' Failed with error: '+ @errorInfo;


EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'name',
@recipients = 'adrs@email.com',
@body = @ErrorInfo,
@subject = @JobName ;




exec [mainsql01].[SlickTicket].[dbo].[AddTicket] 'servicesFailed',@jobName, @ErrorInfo,    '5','4' ;

END
 end
GO

ありがとう、イダン。

4

1 に答える 1

0

トリガーはデフォルトで呼び出し元として実行されますが、これには addticket プロシージャを使用する権限がないと推測されます。追加してみてください

 execute as user_name 

user_name にはその proc を使用する権限があります

于 2013-06-12T15:52:29.230 に答える