Создать триггер с помощью try ... catch в SQL Server 2005 - PullRequest
0 голосов
/ 13 февраля 2009

Я реализовал следующий триггер:

CREATE TRIGGER [OnContactDeleted]
    ON [TABLE].[Contact]
    INSTEAD OF DELETE
    AS 
    BEGIN
        SET NOCOUNT ON
        /*Store contact ID to variable*/
        Update [TABLE].[Account] Set [PrimaryContactID] = null where [TABLE].[Account].[PrimaryContactID] = (Select ContactID from Deleted)
        Delete from [TABLE].[Contact] where [TABLE].[Contact].[ContactID] = (Select ContactID from Deleted)
    END

Очистить набор внешних ключей из другой таблицы, а затем удалить текущую запись. Это было сделано, потому что установка внешнего ключа в null при удалении не работает.

Мой вопрос касается обертывания этого триггера в блок try ... catch, где я могу откатиться, если произойдет исключение. Это хорошая практика, и я должен делать это для такого рода триггера?

Спасибо, Jason

1 Ответ

1 голос
/ 13 февраля 2009

Я бы предпочел оставить это как сбой и разрешить исключение в потребителе (код, выполняющий инструкцию DELETE). Не должно быть никаких логических причин в контексте этого удаления и триггера для сбоя этой операции, поэтому она будет внешним фактором, вызывающим сбой. Следовательно, исключение следует обрабатывать и внешне. Обычно DELETE будет происходить и внутри транзакции, поэтому откат будет иметь место.

...