我有几个结构如下的存储过程:
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
我的同事已经建立了一个报告系统(使用过程/SSIS),每 10 分钟循环一次,只要存储过程完成而没有错误,那么它就会在控制表中标记为完成。
我不明白的是,即使上面抛出错误,为什么它会BEGIN / END
在同一批次中多次重复该部分?
如果防御不够,如何防御我的同事系统导致相同的电子邮件每 10 分钟分发一次?!