2013-12-12 154 views
1

我已经检测到特定的列的值时创建了以下触发:SQL触发器IF语句

ALTER TRIGGER [dbo].[trCompletedDate] ON [dbo].[Record] 
FOR UPDATE AS BEGIN 
IF(UPDATE(Completed)) 

UPDATE Record SET Completed_Date=DATEADD(hh, 7, GETDATE()) 
FROM Record 
INNER JOIN Inserted ON Record.[ID]= Inserted.[ID] 
WHERE Record.Completed = 1 
END 

,工作正常,但我想补充一个IF语句Completed_Date的值更改为Record.Completed = 0时的另一个值。

我只是不确定语法如何。

+0

所以可以尝试添加一个' IF'块? – Kermit

+0

就是这样,我只是不知道它的语法是什么。 –

+0

你可以很容易找到一个搜索引擎的语法... –

回答

3
UPDATE Record SET Completed_Date = 
CASE WHEN Record.Completed = 1 THEN 
    DATEADD(hh, 7, GETDATE()) 
ELSE 
    --Somethin else 
END 
FROM Record 
INNER JOIN Inserted ON Record.[ID]= Inserted.[ID] 
+0

工作正常。谢谢:) –

+0

需要删除'WHERE Record.Completed = 1'。 – bendataclear

+0

是的,我已经做到了。 –

0

您可以使用CASE声明:

UPDATE Record 
SET Completed_Date = 
    CASE Record.Completed WHEN 1 THEN DATEADD(hh, 7, GETDATE()) 
          WHEN 0 THEN SOMETHINGELSE END 
FROM Record 
INNER JOIN Inserted ON Record.[ID]= Inserted.[ID] 
WHERE Record.Completed IN (0,1); 
0

我相信这是:

ALTER TRIGGER [dbo].[trCompletedDate] ON [dbo].[Record] 
FOR UPDATE AS BEGIN 
IF(UPDATE(Completed)) 

UPDATE Record SET 
    Completed_Date=if Record.Completed=0 then <othervalue> 
        else DATEADD(hh, 7, GETDATE()) endif 
FROM Record 
INNER JOIN Inserted ON Record.[ID]= Inserted.[ID] 
WHERE Record.Completed = 1 
END 
0

在这里你去:

ALTER TRIGGER [dbo].[trCompletedDate] ON [dbo].[Record] 
FOR UPDATE AS BEGIN 
IF(UPDATE(Completed)) 

UPDATE Record SET Completed_Date= 
    CASE Record.Completed 
     WHEN 1 THEN DATEADD(hh, 7, GETDATE()) 
     WHEN 0 THEN GETDATE() 
    END 
FROM Record 
INNER JOIN Inserted ON Record.[ID]= Inserted.[ID] 
END