我有一个正在开发的触发器,并希望它基本上处理Update语句意义上的更新,而不是现在那么担心Delete或Insert语句。
最终结果是我有两个状态字段active& inactive,它们分别是bit& datetime。该active字段用于手动使记录无效,并且我想确保该inactive字段包含active更改值。
理想情况下,我想检查是否并使用,在字段中active=0放置日期时间戳以进行记录。now()长期我确定我会想要验证该inactive字段是否已经没有日期时间戳,但现在可以很好地覆盖它。同样,希望它检查是否存在任何值active=1并清除该字段。inactive
该inactive领域是nullable不会有冲突的。
触发器定义,截至目前:
CREATE TRIGGER dbo.TRG_tblRegistration_Inactive
ON dbo.tblRegistration
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
IF update(active) BEGIN
update r
set inactive=now()
from tblRegistration r
join inserted i on r.id = i.id
where i.active = 0
END
END
inserted我对&deleted触发器表有很好的理解。
问题:
- 触发器中是否有更好的逻辑模式可以让我达到最终的预期目标?
- 如果他们使用, 或提交
inactive值,需要考虑什么?active=0active=1
触发器的当前形式:
ALTER TRIGGER dbo.TRG_tblRegistration_Inactive
ON dbo.tblRegistration
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
IF update(active) BEGIN
update r
set inactive=getdate()
from tblRegistration r
join inserted i on r.id = i.id
where i.active = 0
update r
set inactive=NULL
from tblRegistration r
join inserted i on r.id = i.id
where i.active=1
END
END
它可以按预期工作并执行,但要确保首先没有更好的方法来执行此操作(在数据库端或触发器中)。