Parfois, j'ai vu l'extrait de code suivant. Quand le if @@trancount > 0
est-il nécessaire avec begin try
? Les deux? Ou est-ce un moyen sûr (meilleure pratique) de toujours le vérifier au cas où il serait annulé avant le contrôle?
begin tran
begin try
... just several lines of sql ...
if @@trancount > 0 commit tran
end try
begin catch
if @@trancount > 0 rollback tran
end catch
Je peux penser à quelques scénarios à considérer lors de l'utilisation de @@trancount
:
Je crois que Traitement des exceptions et transactions imbriquées de Remus Rusanu gère toutes ces possibilités.
la raison de cette vérification est que si vous validez ou annulez-le lorsque @@ trancount = 0, vous obtenez une exception avec le message d'erreur suivant:.
lorsque vous n'utilisez pas @@ trancount, le message d'erreur de la procédure stockée de transaction imbriquée ne renvoie pas la cause exacte de l'erreur. facile à gérer l'erreur avec la syntaxe appropriée.