我有一张桌子。在此表中,有三列我对创建触发器感兴趣。
我的表格 - tblABC
column name data type
Id int (primary key)
Live bit
CompletionDate date
CancelDate date
所以我希望只要更新CompletionDate或CancelDate就会执行触发器。
我希望触发器做两件事之一
1)如果将CompletionDate或CancelDate列的日期更改为等于今天或更低的日期,那么我希望Live列等于0.
2)如果CompletionDate或CancelDate列的日期更改为大于今天的日期或NULL,那么我希望Live列等于1.
以下是我的代码。我不确定它是否正确我也不确定这将如何处理NULLS?
CREATE TRIGGER TR_MYTRIGGER
ON tblABC
AFTER UPDATE
update d
set d.Live = 0
from tblABC e d
inner join inserted i on d.Id = i.Id
where i.CompletionDate <= GETDATE() or i.CancelDate <= GETDATE()
update d
set d.Live = 1
from tblABC d
inner join inserted i on d.Id = i.Id
where i.CompletionDate > GETDATE() and i.CancelDate > GETDATE()
答案 0 :(得分:3)
正如您在第二点所说,如果两个日期的 设置为大于今天或设置为null
,那么您需要设置您的实时列为1.将您的第二个更新查询更改为此。
update d
set d.Live = 1
from tblABC d
inner join inserted i on d.Id = i.Id
where (i.CompletionDate > GETDATE() or i.CancelDate > GETDATE()
or i.CompletionDate is null or i.CancelDate is null) and d.Live <> 1
但正如评论中所建议的,计算列似乎是更好的选择。
修改为了优化效果,您不应该更新已经1
的行。查看更新的查询。对第一次更新查询执行相同操作。