cs_EmailQueue_Failure
ALTER proc dbo.cs_EmailQueue_Failure
@EmailID uniqueidentifier,
@FailureInterval int,
@MaxNumberOfTries int
as
SET Transaction Isolation Level Read UNCOMMITTED
/**//*設定交易隔離等級,Read UNCOMMITTED 執行髒讀或 0 級隔離鎖定,這表示不發出共用鎖定,
也不接受排它鎖。當設定該選項時,可以對資料執行未提交讀或髒讀;在事務結束前可以更
改資料內的數值,行也可以出現在資料集中或從資料集消失。該選項的作用與在事務內所有
語句中的所有表上設定 NOLOCK 相同。這是四個隔離等級中限制最小的層級。*/
declare @NumberOfTries int --重試次數
select @NumberOfTries = NumberOfTries + 1 from cs_EmailQueue where EmailID = @EmailID
if @NumberOfTries <= @MaxNumberOfTries
begin --如果重試次數小於最大次數,更新重試次數和第二次重試次數
update cs_EmailQueue set
NumberOfTries = @NumberOfTries,
NextTryTime = dateadd(minute, @NumberOfTries * @FailureInterval, getdate())
where EmailID = @EmailID
end
else
begin --如果重試次數超過限制,刪除此條郵件
delete from cs_EmailQueue where EmailID = @EmailID
end
GO
cs_Emails_Dequeue
ALTER PROCEDURE [dbo].cs_Emails_Dequeue
(
@SettingsID int
)
AS
SET Transaction Isolation Level Read UNCOMMITTED
/**//*設定交易隔離等級,Read UNCOMMITTED 執行髒讀或 0 級隔離鎖定,這表示不發出共用鎖定,
也不接受排它鎖。當設定該選項時,可以對資料執行未提交讀或髒讀;在事務結束前可以更
改資料內的數值,行也可以出現在資料集中或從資料集消失。該選項的作用與在事務內所有
語句中的所有表上設定 NOLOCK 相同。這是四個隔離等級中限制最小的層級。*/
BEGIN
SELECT * FROM cs_EmailQueue Where SettingsID = @SettingsID and NextTryTime < getdate()
END
/**//*列出最後重試發送時間小於目前時間的所有郵件*/
GO
cs_Emails_Enqueue
ALTER PROCEDURE [dbo].cs_Emails_Enqueue
(
@EmailTo nvarchar(2000),
@EmailCc ntext,
@EmailBcc ntext,
@EmailFrom nvarchar(256),
@EmailSubject nvarchar(1024),
@EmailBody ntext,
@EmailPriority int,
@EmailBodyFormat int,
@SettingsID int
)
AS
SET Transaction Isolation Level Read UNCOMMITTED
/**//*設定交易隔離等級,Read UNCOMMITTED 執行髒讀或 0 級隔離鎖定,這表示不發出共用鎖定,
也不接受排它鎖。當設定該選項時,可以對資料執行未提交讀或髒讀;在事務結束前可以更
改資料內的數值,行也可以出現在資料集中或從資料集消失。該選項的作用與在事務內所有
語句中的所有表上設定 NOLOCK 相同。這是四個隔離等級中限制最小的層級。*/
BEGIN
INSERT INTO
cs_EmailQueue
(
emailTo,
emailCc,
emailBcc,
EmailFrom,
EmailSubject,
EmailBody,
emailPriority,
emailBodyFormat,
SettingsID
)
VALUES
(
@EmailTo,
@EmailCc,
@EmailBcc,
@EmailFrom,
@EmailSubject,
@EmailBody,
@EmailPriority,
@EmailBodyFormat,
@SettingsID
)
/**//*插入新的郵件到郵件隊列中*/
END
GO