2008-09-18 4 views
4

Procs Supposons que j'ai une procédure stockée qui gère sa propre transactiontransactions scope correctement stockées

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 annuler la transaction externe. Comment puis-je correctement définir la transaction dans la procédure stockée, afin que la procédure stockée n'annule pas les transactions externes?

+0

Regardez [cette vidéo DNR-TV] (http://www.intellectualhedonism.com/2008/06/01/dnrTV113BrentVanderMeideOnTransactionScopesInNET20Part1.aspx), ils parlent beaucoup de la portée de la transaction, bien que la manipulation dans le code vs sql. J'espère que cela t'aides. –

Répondre

2

La syntaxe pour faire cela varie probablement par la base de données. Mais dans Transact-SQL ce que vous faites est de vérifier @@ TRANCOUNT pour voir 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 à travers la fin de la fonction (croire qu'un commit ou un rollback arrivera plus tard) ou bien retourner à votre savepoint.

Voir la documentation de Microsoft sur savepoints 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 existe) pour savoir que vous êtes actuellement dans une transaction varie beaucoup.

1

utilisation @@ trancount pour voir si vous êtes déjà dans une transaction lors de l'entrée