特定插入后的T-SQL触发器

时间:2012-01-03 23:03:39

标签: sql sql-server-2008 tsql triggers insert

我需要编写一个触发器,该触发器仅在插入具有特定值的特定字段的插入时运行。没有更新。

例如,如果我插入一个列X的值为“MAC ID”的条目,我希望它运行一个触发器,但只有当值为“MAC ID”时才会运行。

我知道如何正常测试,但不知道如何在触发器中测试它。到目前为止,我发现我想使用“FOR INSERT”,但除此之外,我不知道如何实现它。

非常感谢任何帮助!谢谢!

2 个答案:

答案 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

除了insertupdate和/或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'