2015-08-15 4 views
0

У меня есть триггер обновления, который запускается, если изменяется поле «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.

Что я должен изменить?

+0

Добавить обновление в null в другую часть инструкции if? –

+0

да точно .... – user763539

ответ

0

Вы можете добавить еще один запрос на обновление в другой части условного выражения, или вы можете переписать свое обновление и использовать значение бит в качестве условного напрямую.

Это должно работать (если я правильно понял вас).

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() будет использоваться.

+0

Я думаю, что вам что-то не хватает здесь ... Если он не пойдет CASE КОГДА ОБНОВЛЕНИЕ (UREJENO) = Правда? Я попробовал ваше предложение, и поля обновляются, независимо от истины или ложности. – user763539

+0

'UREJENO' - логическое поле (бит) – user763539

+0

@ user763539 О, так что вы хотите запустить обновление, если поле верно? Тогда я неправильно понял, изменим ответ через минуту. – jpw

Смежные вопросы