J'ai certains SP dans une base de données "Microsoft SQL Server 2012 (SP3)". Ces SP peuvent être appelés à partir d'applications VB6 et d'autres SP, ou à partir d'applications .Net.TSQL - Transaction distribuée ou locale?
Si un SP est appelé à partir d'autres SP ou applications VB6, je peux annuler la transaction en cours et donner des messages d'erreur corrects avec raiserror
en cas d'erreurs/entrées invalides.
Mais parce que les connexions ouvertes par les applications .Net sont accrochés à transactions distribuéessi plusieurs services WCF sont impliqués (il est une norme de l'entreprise, nous utilisons MS DTC) Je ne devrais pas annuler la transaction et je ne appelez raiserror
commande.
Si nous roulera la transactions distribuées, tous les messages d'erreur élevés avec la commande raiserror
sont perdus et sur le côté .Net, nous obtenons une exception dont le message est:
Le Coordinateur de transactions distribuées Microsoft (MS DTC) a annulé la transaction distribuée
Comment puis-je savoir si je suis dans une transaction distribuée ou si je suis dans une transaction locale pendant le codage au sein SPs? Si je suis dans une transaction distribuée, je n'exécuterai pas l'instruction de restauration.
Toute aide serait appréciée.
Peut-être que ce fil peut vous aider, j'espère que ce n'est pas trop vieux http://stackoverflow.com/questions/2919018/in-sql-server-how-do-i-know-what -transaction-mode-im-actuellement-using – Petaflop
Aussi, je ne sais pas combien de ces SP vous avez, mais vous pouvez avoir un paramètre dans chacun d'eux pour indiquer si vous devez annuler ou non – Petaflop
@MSANZ merci, J'ai déjà visité ce sujet, mais cela n'a pas aidé les transactions distribuées. Il ne peut dire que des modes de transaction explicites non-implicites. À propos de l'ajout d'un paramètre à chaque SP, il est pratiquement impossible à cause du grand nombre de SP et parce que les SP font des appels subséquents à d'autres SP. Je ne peux pas connaître le chemin sur lequel une transaction rejetant SP est appelée, donc je dois ajouter le paramètre à tous les SP et propager la valeur à tous les appels suivants. –