我是觸發器的新手,我處於必須使用觸發器的位置。我有一個在桌面上有兩個觸發器的天青數據庫,一個在插入,一個在更新。在觸發另一個觸發器後啓用觸發器
插入:當記錄插入表格時觸發。複製一個列到另一個:
CREATE TRIGGER [dbo].[tr_Set_Adjusted_StartDateTime]
ON [dbo].[Work]
AFTER INSERT
AS
BEGIN
UPDATE dbo.Work
SET [ActualStartDateTime] = [work].[StartDateTime]
FROM inserted
WHERE dbo.Work.WorkUID = inserted.WorkUID;
END
更新觸發(火災時,該記錄被更新):
CREATE TRIGGER [dbo].[tr_Set_Actual_EndDateTime]
ON [dbo].[Work]
AFTER UPDATE
AS
IF((Select [ActualEndDateTime] from Deleted) is null)
BEGIN
UPDATE dbo.Work
SET [ActualEndDateTime] = GETUTCDATE()
FROM deleted
WHERE dbo.Work.WorkUID = deleted.WorkUID;
END
第二個觸發應該只執行一次:第一次記錄更新。因爲插入記錄的存儲過程不會填充所有列。
第二個觸發器原本沒有IF語句。但有一個管理站點可以操縱數據庫並啓動更新觸發器。
IF語句現在會立即自動觸發更新觸發器。
有沒有辦法禁用更新觸發器,如果它被另一個觸發器執行?或者只在記錄創建後啓用更新觸發器?
注意--''''''''''''可以包含*多行*(或無行)。所以'IF'檢查可能會被破壞,因爲您可能處於* some行的測試結果爲真的情況,對於其他行,測試將是錯誤的。 – 2014-09-26 06:44:46