2012-01-03 19 views
3

我需要編寫一個觸發器,該插件只有在插入具有特定值的特定字段的插入時纔會運行。沒有更新。特定插入後的T-SQL觸發器

例如,如果我插入具有值爲「MAC ID」的列X的條目,我希望它運行觸發器,但只有值爲「MAC ID」時。

我知道如何正常測試,但不知道如何在觸發器中進行測試。到目前爲止,我發現我想使用「FOR INSERT」,但除此之外,我不知道如何實現它。

任何幫助非常感謝!謝謝!

回答

5
create trigger MaxIdInsert 
on YourTable 
after insert 

as 

    if exists 
    (
     select * 
     from inserted 
     where ColumnX = 'MAX ID' 
    ) 
    begin 
     -- do what you want here if ColumnX has value of 'MAX ID' 
    end 

go 

有沒有辦法火一定規格的DML觸發器(除了insertupdate,和/或delete)。最好的辦法是測試動態inserted表,其中包含插入到YourTable中的記錄。在此,您可以測試插入的記錄,其ColumnX值爲「MAX ID」

編輯:如果您想知道,我知道您在您的問題中指定了for觸發器。一個for觸發器相當於SQL Server中的一個after觸發器。

+0

這正是我一直在尋找的,它的工作原理完美。優秀的解釋和漂亮的代碼。謝謝! – ImGreg 2012-01-04 14:16:59

3

您需要注意的是,觸發器對批次運行一次,而不是每行一次。因此,您可能會在某些的行符合您的條件的情況下運行,而其他條件則不會。

因此,您最好編寫觸發邏輯以從inserted中選擇匹配的行。如果沒有匹配的行,其餘的邏輯將使用空集,但這不是真正的問題 - SQL Server在需要時無所事事,速度足夠快。

E.g.如果你將這些行插入到審計表中,如下所示:

create trigger MacId 
on T 
for insert 
as 
    insert into Audit(Col1,Col2,Col3) 
    select i.Col1,i.Col2,'inserted' 
    from inserted i 
    where i.Col4 = 'MAC ID'