我需要編寫一個觸發器,該插件只有在插入具有特定值的特定字段的插入時纔會運行。沒有更新。特定插入後的T-SQL觸發器
例如,如果我插入具有值爲「MAC ID」的列X的條目,我希望它運行觸發器,但只有值爲「MAC ID」時。
我知道如何正常測試,但不知道如何在觸發器中進行測試。到目前爲止,我發現我想使用「FOR INSERT」,但除此之外,我不知道如何實現它。
任何幫助非常感謝!謝謝!
我需要編寫一個觸發器,該插件只有在插入具有特定值的特定字段的插入時纔會運行。沒有更新。特定插入後的T-SQL觸發器
例如,如果我插入具有值爲「MAC ID」的列X的條目,我希望它運行觸發器,但只有值爲「MAC ID」時。
我知道如何正常測試,但不知道如何在觸發器中進行測試。到目前爲止,我發現我想使用「FOR INSERT」,但除此之外,我不知道如何實現它。
任何幫助非常感謝!謝謝!
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觸發器(除了insert
,update
,和/或delete
)。最好的辦法是測試動態inserted
表,其中包含插入到YourTable
中的記錄。在此,您可以測試插入的記錄,其ColumnX
值爲「MAX ID」。
編輯:如果您想知道,我知道您在您的問題中指定了for
觸發器。一個for
觸發器相當於SQL Server中的一個after
觸發器。
您需要注意的是,觸發器對批次運行一次,而不是每行一次。因此,您可能會在某些的行符合您的條件的情況下運行,而其他條件則不會。
因此,您最好編寫觸發邏輯以從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'
這正是我一直在尋找的,它的工作原理完美。優秀的解釋和漂亮的代碼。謝謝! – ImGreg 2012-01-04 14:16:59