我需要爲我的表創建一個包含數百萬個插入的觸發器。插入SQL Server 2000觸發器
該觸發器會向我發送一封電子郵件(已完成),表示該表正在通電。
該電子郵件只能在插入開始時發送一次(每天一次)。
換句話說,我想這樣做:
Create trigger on table T1 on FIRST INSERT; EXEC my procedure to send email
不是作爲一個開發者,我真的不知道該怎麼寫......
謝謝你的幫助。
我需要爲我的表創建一個包含數百萬個插入的觸發器。插入SQL Server 2000觸發器
該觸發器會向我發送一封電子郵件(已完成),表示該表正在通電。
該電子郵件只能在插入開始時發送一次(每天一次)。
換句話說,我想這樣做:
Create trigger on table T1 on FIRST INSERT; EXEC my procedure to send email
不是作爲一個開發者,我真的不知道該怎麼寫......
謝謝你的幫助。
你不能輕易做一個ON FIRST INSERT
觸發器。
你可以做的是這樣的:
ON INSERT
觸發器,向您發送電子郵件在那個觸發結束,禁用該觸發器:
ALTER TABLE dbo.YourTable DISABLE TRIGGER YourTriggerNameHere
這將防止觸發器反覆發射並向您發送大量電子郵件。
然後,您還需要一個SQL代理作業,該作業將在晚上再次啓用該觸發器 - 以便它可以在第二天的第一次插入時再次觸發。
更新: OK,所以你的情況這將是:
CREATE TRIGGER sendMail
ON MyTable AFTER INSERT
AS
EXEC master.dbo.MyProcedure
ALTER TABLE dbo.MyTable DISABLE TRIGGER sendMail
,並在晚上你的SQL代理作業,你需要:
ALTER TABLE dbo.MyTable ENABLE TRIGGER sendMail
正是我在想什麼。它每天完成一次,但我不知道是否可以啓用和禁用觸發器... – 2013-02-15 16:08:06
所以我的腳本會是這樣的(如果我錯了,請糾正我): CREATE TRIGGER sendMail ON MyTable AFTER INSERT AS EXEC master.dbo.MyProcedure //如何關閉它? – 2013-02-15 16:14:28
@ user2076126:更新了我的答案,詳細說明了如何禁用和重新啓用觸發器 – 2013-02-15 16:20:58
你不能直接觸發第一次更新的觸發器。
但是,您可以有一張表,記錄您何時發送電子郵件以及哪些表格,並且在觸發器中您可以詢問當天是否有記錄,如果不存在,請將其插入該表格中,打電話給你。
你的sp也可以做這個檢查。
爲什麼沒有你最近一次發送電子郵件時,是否還在觸發器中更新了表?然後,你可以在觸發查詢此表,並決定是否要發出另一個上
create trigger tr
on tab after insert
as
begin
declare @today datetime;
set @today = cast(convert(varchar(32), getdate(), 112) as datetime);
if not exists(select * from logtab where logdate = @today)
begin
-- Send the email
exec sendMail
-- Update Log Table
update logtab
set logdate = @today
end
end
GO
你不能有一個'在第一次INSERT' - 無論它是在** **全部插入,或什麼都沒有。 – 2013-02-15 15:57:34
如果您想使用電子郵件,那麼我認爲您的要求並不是要確切知道第一個「插入」發生的時間,而是要知道您的加載過程已經開始。如果是這樣,您可以創建一個每5分鐘運行一次的SQL作業,並檢查表中是否有新行(取決於數據的方式)。如果有新行,則發送電子郵件,否則什麼也不做。更好的做法是將通知構建到加載過程本身,但我認爲它不在您的控制範圍之內,或者您不需要此解決方案。 – Pondlife 2013-02-15 16:55:28