2009-02-13 11 views
0

J'ai mis en place le déclencheur suivant:Créer déclencheur avec try ... catch dans 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 

Il est clair un ensemble de clés étrangères sur une autre table, puis supprimez l'enregistrement en cours. Cela a été fait car la définition de la clé étrangère sur null lors de la suppression ne fonctionne pas.

Ma question concerne l'enrobage de ce déclencheur dans un bloc try ... catch où je peux revenir en arrière si une exception se produit. Est-ce une bonne pratique et devrais-je le faire pour ce genre de déclencheur?

Merci, Jason

Répondre

1

je préfère laisser cela à l'échec et laisser l'exception être traitée dans le consommateur (le code effectuant une instruction DELETE). Il ne devrait pas y avoir de raison logique dans le contexte de cette suppression et le déclenchement de l'échec de cette opération serait donc un facteur externe à l'origine de l'échec. Par conséquent, l'exception doit également être traitée à l'externe. Normalement, le DELETE se déroulerait également dans une transaction, c'est donc là que le rollback aurait lieu.