用条件更新触发器

时间:2015-08-15 18:27:39

标签: sql-server sql-server-2014-express

如果字段'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 

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

我必须改变什么?

1 个答案:

答案 0 :(得分:0)

您可以在条件的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(false),则会将两个字段设置为null,但UREJENO设置为1(true),然后使用getdate()和user_name()。