Триггер SQL Server 2005 - как безопасно определить, запущены ли UPDATE или DELETE? - PullRequest
0 голосов
/ 09 декабря 2008

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

CREATE TRIGGER [myTrigger] ON [myTable]
FOR UPDATE,DELETE
AS
BEGIN

DECLARE @OperationType VARCHAR(6)
IF EXISTS(SELECT 1 FROM INSERTED)
BEGIN
    SET @OperationType='Update'
END
ELSE
BEGIN
    SET @OperationType='Delete'
END

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

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

Ответы [ 2 ]

4 голосов
/ 09 декабря 2008

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

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

END

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

END
3 голосов
/ 09 декабря 2008

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

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

...