2017-03-19 41 views
-4

我有兩個名爲test的表,test_audit.i在測試表 中有一個狀態列,如果我更新了測試表中的狀態列,值爲'APPROVED'那麼只有後更新觸發器將被解僱。我想要查詢創建觸發器 (如果我更新狀態,除了'APPROVED'觸發器不會觸發)更新後觸發如果更新的列值等於'APPROVED'

+0

而你的問題是什麼?試過了什麼? – GurV

+1

觸發器始終會觸發。在觸發器中放置一個「if」。 –

+0

@gordon linoff謝謝你的信息,但我不知道如何應用if語句中的trigger.if有可能請寫下查詢 –

回答

1

您無法控制觸發器是否會被觸發,但是你可以控制觸發器內部會發生什麼。

你應該知道觸發器是基於語句而不是行來觸發的,所以要小心不要假設插入的表只包含一行。

話雖這麼說,你的觸發可能是這個樣子:

CREATE TRIGGER dbo.tr_Test ON dbo.Test FOR UPDATE 
AS 

    INSERT INTO test_audit (Id, Name, [Status], [time stamp]) 
    SELECT Id, Name, [Status], GETDATE() 
    FROM Inserted I 
    WHERE I.[Status] = 'APPROVED' 
    AND EXISTS 
    (
     SELECT 1 
     FROM Deleted D 
     WHERE D.Id = I.Id -- assuming primary key column is called id... 
     AND D.[Status] <> 'APPROVED' 
    ) 
+0

不工作老闆 –

+0

當然,我不知道你的表格結構和你的目標,我只是向您展示如何檢查觸發器內部的觸發器列,即「狀態」列已更改爲「已批准」......如果您想要量身定製的解決方案,您將必須提供更多詳細信息 –

+0

測試表有ID,名稱,狀態列和ID是標識column.table審計也有相同的列除了時間戳列 –