Я покажу вам простой способ проверить это в SQL Server 2000 или 2005, но в целом я согласен с Ремусом, что вы должны разбить их на отдельные триггеры:
DECLARE @insert INT, @delete INT;
SELECT @insert = COUNT(*) FROM inserted;
SELECT @delete = COUNT(*) FROM deleted;
IF @insert [email protected] > 0
BEGIN
IF @insert > 0 AND @delete = 0
-- insert
IF @insert > 0 AND @delete > 0
-- update
IF @insert = 0 AND @delete > 0
-- delete
END
Обратите внимание, что это может быть несовместимо с передовой совместимостью из-за сложности, которую MERGE представляет в SQL Server 2008/2012.
Итак, если вы планируете использовать SQL Server 2008/2012 и MERGE в будущем, как решение выше, то это еще больше оснований разбить триггер на триггер для каждого типа операции DML.
есть вопрос (с ответами!) На SO по этому вопросу. Сначала попробуйте некоторые из них ... – rene
Прочтите [официальные электронные книги SQL Server о триггерах] (http://technet.microsoft.com/en-us/library/ms189799.aspx) или см. [Изучение триггеров SQL Server (на MSDN)] (http://msdn.microsoft.com/en-us/magazine/cc164047.aspx) для более подробной информации. Как только вы прочтете это - ** попробуйте сами написать триггер! ** Если вы все еще застряли - вернитесь с ** конкретным вопросом **. –