Я покажу вам простой способ проверить это в SQL Server 2000 или 2005 (вы забыли упомянуть, какую версию вы используете), но в целом я согласен с Remus, что вы должны разбить их на отдельные триггеры:
DECLARE @i INT, @d INT;
SELECT @i = COUNT(*) FROM inserted;
SELECT @d = COUNT(*) FROM deleted;
IF @i + @d > 0
BEGIN
IF @i > 0 AND @d = 0
BEGIN
-- logic for insert
END
IF @i > 0 AND @d > 0
BEGIN
-- logic for update
END
IF @i = 0 AND @d > 0
BEGIN
-- logic for delete
END
END
Обратите внимание, что это может быть несовместимо с прямой совместимостью из-за сложности MERGE
, представленной в SQL Server 2008. См. Этот элемент Connect для получения дополнительной информации:
Так что, если вы планируете использовать SQL Server 2008 и MERGE
в будущем, это еще больше повод разделить триггер на триггер для каждого типа операции DML.
(И если вам нужно больше причин, чтобы избежать MERGE
, , прочитайте это .)