Transactions correctement définies dans les processus stockés
-
01-07-2019 - |
Question
Supposons que j'ai une procédure stockée qui gère sa propre transaction
CREATE PROCEDURE theProc
AS
BEGIN
BEGIN TRANSACTION
-- do some stuff
IF @ThereIsAProblem
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION
END
Si j'appelle ce proc à partir d'une transaction existante, le proc peut ROLLBACK la transaction externe.
BEGIN TRANSACTION
EXEC theProc
COMMIT TRANSACTION
Comment étendre correctement la transaction au sein de la procédure stockée afin que celle-ci n'annule pas les transactions externes?
La solution
La syntaxe à suivre varie probablement selon la base de données. Mais dans Transact-SQL, vous vérifiez @@ TRANCOUNT pour savoir si vous êtes dans une transaction. Si vous êtes alors vous voulez créer un point de sauvegarde, et à la fin, vous pouvez simplement passer à la fin de la fonction (en croyant qu'une validation ou une annulation aura lieu plus tard) ou bien une restauration vers votre point de sauvegarde.
Consultez la documentation de Microsoft sur les points de sauvegarde pour plus d'informations.
La prise en charge des points de sauvegarde est assez répandue, mais je pense que le mécanisme (en supposant qu'il en existe un) pour savoir que vous êtes actuellement dans une transaction varie considérablement.
Autres conseils
utilisez @@ trancount pour voir si vous êtes déjà dans une transaction lors de la saisie