我是触发器的新手,我处于必须使用触发器的位置。我有一个在桌面上有两个触发器的天青数据库,一个在插入,一个在更新。在触发另一个触发器后启用触发器
插入:当记录插入表格时触发。复制一个列到另一个:
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