Quickest:
IF NOT EXISTS (SELECT * FROM DELETED)
PRINT 'INSERT'
ELSE IF NOT EXISTS (SELECT * FROM INSERTED)
PRINT 'DELETE'
ELSE
PRINT 'UPDATE'
Больше неэффективно
SELECT @foo int
SET @foo = (SELECT COUNT(*) FROM INSERTED) - (SELECT COUNT(*) FROM DELETED)
IF @foo > 0
PRINT 'INSERT'
ELSE @foo < 0
PRINT 'DELETE'
ELSE
PRINT 'UPDATE'
Как правило, у вас редко будет триггер, который охватывает все 3. По моему опыту, это U / D или I / U, где вы можете проверить меньше.
Обратите внимание, что триггер на MyTable ниже все еще срабатывает, но на самом деле строки не вставляются. Вы не можете перехватить это, если у вас нет отдельного триггера вставки
INSERT dbo.Mytable (col1,...)
SELECT
value1, ...
WHERE
1 = 0