Триггер T-SQL после конкретной вставки - PullRequest
3 голосов
/ 04 января 2012

Мне нужно написать триггер, который запускается только при вставке вставки с определенным полем с определенным значением. Там нет обновления.

Например, если я вставляю запись со столбцом X со значением «MAC ID», я хочу, чтобы он запускал триггер, но ТОЛЬКО если значение «MAC ID».

Я знаю, как проверить это нормально, но не уверен, как проверить это в триггере. До сих пор я обнаружил, что хочу использовать «FOR INSERT», но кроме этого я не знаю, как его реализовать.

Любая помощь очень ценится! Спасибо!

Ответы [ 2 ]

5 голосов
/ 04 января 2012
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 эквивалентен триггеру after в SQL Server.

3 голосов
/ 04 января 2012

Вы должны знать, что триггеры запускаются один раз для пакета, а не один раз для строки.Таким образом, вы можете работать в ситуации, когда некоторые строк соответствуют вашим критериям, а другие - нет.

Таким образом, вам лучше всего написать логику триггеравыбрать подходящие строки из inserted.Если не было совпадающих строк, остальная часть вашей логики будет работать с пустым набором, но это не представляет реальной проблемы - SQL Server достаточно быстр, чтобы ничего не делать, когда это необходимо.вставка этих строк в таблицу аудита, что-то вроде:

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'
...