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?

Était-ce utile?

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

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