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

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top