Bonjour à tous
Dans mon code, j'utilise beaucoup les procédures stockées imbriquées. Les traitements de mes procédures stockées effectuent tous plusieurs opérations dans la base de données, ils sont donc encapsulés dans une transaction. Mes procédures stockées enfants peuvent être également éxécutées en tant que parent. Je démarre donc toutes mes procédures stockées enfant par un BEGIN TRAN après le BEGIN TRY et en cas d'erreur, je teste la condition suivante avant d'effectuer un rollback : IF @@trancount = 1 and xact_state()<>0. Ma question est la suivante, lorsque j'effectue un EXECUTE d'une procédure stockée, est ce que la valeur de @@trancount peut être modifiée par un autre EXECUTE d'une procédure stockée, hors appels de procédure stockée interne ou externe.
Exemple :
la procédure stockée A appelle la procédure stockée B
la procédure stockée C ne fait appel à aucune autre procédure stockée
Le traitement de chacune des procédures stockées est encapsulé dans une transaction

Est ce que, dans la même session user, le cas présent peut se produire :
J'éxécute la procédure stockée A, la valeur de @@trancount passe à 1 puis à 2 après le BEGIN TRAN de la procédure stockée B
Maintenant, imaginons que ma procédure ne soit pas terminée mais que, dans le même temps, le moteur SQL Server éxecute la procédure stockée C sur la même session. Est ce que la valeur de @@trancount après le BEGIN TRAN de la procédure stockée est C est 1 ou 3 ?