2009-02-13 4 views
0

Я реализовал следующий триггер:Создать триггер Try ... Catch в SQL Server 2005

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, где я могу откат, если возникает исключение. Это хорошая практика, и я должен делать это для такого триггера?

Спасибо, Джейсон

ответ

1

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

Смежные вопросы