Transaction dans le code stocké Proc + Client

J'ai une procédure stockée de SQL Server qui crée une TRANSACTION comme ceci:

BEGIN TRY BEGIN TRANSACTION INSERT INTO Table1 ... INSERT INTO Table2 ... COMMIT END TRY BEGIN CATCH IF @@TRANCOUNT > 0 ROLLBACK END CATCH 

Cette procédure stockée va insert dans deux tables distinctes. Si l'un d'eux échoue, il va revenir en arrière.

J'ai aussi le code .net suivant qui crée une scope de transaction:

 using( var scope = new TransactionScope() ) { SqlCommand cmd1 = connection.CreateCommand(); SqlCommand cmd2 = connection.CreateCommand(); // ... cmd1.ExecuteNonQuery(); cmd2.ExecuteNonQuery(); scope.Complete(); } 

Que se passe-t-il si ma procédure stockée et mon code créent une transaction? Cela causera-t-il des problèmes / devra-t-il être une transaction dissortingbuée ou est-ce correct tant que je ne crée qu'une connection à la database?

Sauf si vous aviez de bonnes raisons, je ferais les transactions dans un seul endroit ou l'autre.

Et si possible, je voudrais que cet endroit soit la database. Cela réduit les allers-returns, est plus facilement testable, l'isole des autres composants du système, réduit la surface exposée de la database et protège l'intégrité du périmètre de la database en forçant les actions à passer par une interface bien définie.

Dans ce scénario, si l'une de vos procédures stockées échoue, elle sera annulée à l'aide de la transaction interne. Votre code pense qu'il a terminé et valider la transaction dissortingbuée. Est-ce ce que vous voulez, car la transaction distirbuted est inutile car chacun fonctionnera individuellement.

Si vous souhaitez que les deux fonctionnent ou non, supprimez votre transaction de la procédure stockée et utilisez simplement la transaction dissortingbuée.