次のような構造のストアド プロシージャがいくつかあります。
USE [WHouse]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[pr_Alert_Dly]
AS
IF (SELECT LastRunDate FROM WHouse.dbo.AlertRunDates WHERE NameDescription = 'X' ) < (SELECT CONVERT(DATE, GETDATE()))
BEGIN
--================
--need to comment the following out if trying to re-run
UPDATE x
SET x.LastRunDate = CONVERT(DATE,GETDATE())
FROM WHouse.dbo.AlertRunDates x
WHERE [NameDescription] = 'X'
--================
--===============
--DO A LOAD OF STUFF IN HERE
--INCLUDING USING DB_SENDMAIL TO EMAIL 20 PEOPLE
--===============
END
私の同僚は、10 分ごとにループし、ストアド プロシージャがエラーなしで完了する限り、制御テーブルで完了としてマークされるレポート システム (プロシージャ/SSIS を使用) をセットアップしました。
私が理解できないのは、上記がエラーをスローしたとしても、なぜBEGIN / END
同じバッチで複数回セクションを繰り返すのでしょうか?
防御が十分でない場合、同僚のシステムによって同じメールが 10 分ごとに配信されるのを防ぐにはどうすればよいでしょうか。