SQL Server 2005 триггер - как безопасно определить, обстрелян UPDATE или DELETE?

голоса
0

У меня есть следующий код в триггер SQL Server 2005:

CREATE TRIGGER [MyTrigger] ON [MyTable]
FOR UPDATE, DELETE
В ВИДЕ
НАЧАТЬ

ЗАЯВЛЯЮ @OperationType УАКСНАК (6)
IF EXISTS (SELECT 1 FROM INSERT IGNORE ED)
НАЧАТЬ
    SET @ OperationType = 'Обновить'
КОНЕЦ
ELSE
НАЧАТЬ
    SET @ OperationType = 'Удалить'
КОНЕЦ

Мой вопрос: есть ли ситуация, в которой @OperationType не заполняется правильно? EG: данные в таблице изменяются связкой UPDATE / DELETE заявления, но триггер не срабатывает при каждом из них?

У вас есть лучший способ, чтобы определить, если триггер был запущен с помощью UPDATE или DELETE заявления?

Задан 09/12/2008 в 16:53
источник пользователем
На других языках...                            


2 ответов

голоса
4

Почему бы вам не просто создать два отдельных триггеров?

CREATE TRIGGER [myUpdateTrigger] ON [myTable]
FOR UPDATE
AS
BEGIN

END

CREATE TRIGGER [myDeleteTrigger] ON [myTable]
FOR DELETE
AS
BEGIN

END
Ответил 09/12/2008 в 17:00
источник пользователем

голоса
3

Простой ответ: Нет, не будет ситуация, в которой триггер не может правильно определить (кроме случаев, когда нет измененных строк).

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

Ответил 09/12/2008 в 17:02
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more