使用条件更新触发器

update trigger with a condition

我有一个更新触发器,它会在字段 'urejeno' 被修改时运行。

USE [MYDATABASE]
GO

create trigger trg_MyTrigger on dbo.mytable 
after update 
as 
    if @@ROWCOUNT = 0
        return

    set nocount on

    if UPDATE (UREJENO)
       update mytable 
       set UREJENO_KDAJ = getdate(),
           UREDIL_KDO   = USER_NAME()
       from mytable S
       inner join Inserted I on S.TW_ID = I.TW_ID 

但是我想添加一个条件,这样 if 'urejeno' = True 触发器执行上述操作,但如果条件为 'False' 我想将提到的字段设置为 NULL。

我必须改变什么?

您可以在条件的 else 部分添加另一个更新查询,或者您可以重写您的更新并直接使用位值作为条件。

这应该有效(如果我理解你的意图正确的话)。

CREATE TRIGGER trg_MyTrigger ON dbo.mytable 
AFTER UPDATE 
AS 
    IF @@ROWCOUNT = 0
        RETURN
    SET NOCOUNT ON

    IF UPDATE(UREJENO) 
    BEGIN
    UPDATE mytable 
    SET 
       UREJENO_KDAJ = CASE WHEN I.UREJENO = 1 THEN GETDATE() ELSE NULL END,
       UREDIL_KDO   = CASE WHEN I.UREJENO = 1 THEN USER_NAME() ELSE NULL END
    FROM mytable S
    INNER JOIN Inserted I on S.TW_ID = I.TW_ID 
    END
GO

如果 UREJENO 更新为 0(假),这会将两个字段设置为空,但 UREJENO 设置为 1(真),然后将使用 getdate() 和 user_name()。