我有一个正在开发的触发器,并希望它基本上处理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=0
active=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
它可以按预期工作并执行,但要确保首先没有更好的方法来执行此操作(在数据库端或触发器中)。