Créer déclencheur avec try ... catch dans SQL Server 2005
-
23-08-2019 - |
Question
Je l'ai mis en place le déclencheur suivant:
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
Il est clair un ensemble de clés étrangères sur une autre table, puis supprimez l'enregistrement en cours. Cela a été fait parce que le réglage de la clé étrangère null en suppression ne fonctionne pas.
Ma question porte sur l'emballage ce déclencheur dans un bloc try ... catch où je peux revenir si une exception se produit. Est-ce que les bonnes pratiques et dois-je faire pour ce genre de déclencheur?
Merci, Jason
La solution
Je préférerais laisser échouer cette opération et laisser l'exception être traitée dans le consommateur (le code effectuant une instruction DELETE). Il ne devrait pas être une raison logique dans le contexte de cette suppression et de déclenchement de cette opération à l'échec il serait donc un facteur externe entraînant l'échec. Par conséquent, l'exception doit être traitée à l'extérieur aussi bien. Normalement, le SUPPRIMER aurait lieu dans une transaction aussi, donc c'est où le rollback aurait lieu.