我需要编写一个触发器,该触发器仅在插入具有特定值的特定字段的插入时运行。没有更新。
例如,如果我插入一个列X的值为“MAC ID”的条目,我希望它运行一个触发器,但只有当值为“MAC ID”时才会运行。
我知道如何正常测试,但不知道如何在触发器中测试它。到目前为止,我发现我想使用“FOR INSERT”,但除此之外,我不知道如何实现它。
非常感谢任何帮助!谢谢!
答案 0 :(得分: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
除了insert
,update
和/或delete
之外,仅无法触发某些DML规范的触发器。最好的办法是测试动态inserted
表,其中包含插入YourTable
的记录。在此,您可以测试ColumnX
值“MAX ID”的插入记录。
编辑:如果您想知道,我知道您在问题中指定了for
触发器。 for
触发器相当于SQL Server中的after
触发器。
答案 1 :(得分: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'