Exécution d'une procédure stockée à l'intérieur de DÉBUT/la FIN de la TRANSACTION
Si je créer une Procédure Stockée dans SQL et de l'appeler (EXEC spStoredProcedure
) dans le DÉBUT/la FIN de la TRANSACTION, est-ce autre procédure stockée entrent également dans la transaction?
Je ne sais pas si cela a fonctionné comme essayer/captures en C#.
Vous devez vous connecter pour publier un commentaire.
Oui, tout que vous faites entre le début de la Transaction et de s'Engager (ou de Restauration) est la partie de la transaction.
A l'air génial, merci beaucoup. J'ai fini par faire quelque chose comme ça (parce que je suis sur 05)
Je crois que dans MS SQL Server de l'exécution de la procédure stockée arriverait-il au sein de la transaction, mais être très prudent avec cela. Si vous avez des transactions imbriquées (c'est à dire, transaction en dehors de la procédure stockée et une autre transaction à l'intérieur de la procédure stockée), une reprise aura une incidence sur TOUTES les transactions, pas seulement la plus proche de la transaction jointe.
Comme Chris l'a mentionné, vous devez être prudent sur le déploiement de l'opération de retour.
Précisément ceci:
n'est pas toujours ce que vous voulez. Vous pourriez faire quelque chose comme ce
De cette façon, l'appel de la proc peut inspecter la valeur de retour de la procédure stockée et de déterminer si elle veut s'engager de toute façon ou de continuer à faire des bulles de l'erreur.
La raison en est que 'COMMIT' sera juste décrémenter votre transaction compteur. Une fois qu'il décrémente le compteur de transaction à zéro, une réelle commit va se produire.
Comme Chris et James mentionné, vous devez être prudent lorsque vous traitez avec les transactions imbriquées.
Il est un très bon articles sur le sujet de transactions écrit par Ne Peterson sur SQL Server Central , je vous recommande d'avoir une lecture de celles-ci:
Ici il y a:
Oui, tous imbriqués les appels de procédure stockée sont inclus dans le champ d'application de la transaction. Si vous utilisez SQL Server 2005 ou plus, vous pouvez utiliser Try...Catch ainsi. Ici plus de détails sur ce point.
@Chris, je ne le savais pas.
Lors de recherches sur google pour plus d'info, je suis tombé sur cette - vous pouvez régler "points de sauvegarde", qui peut être annulée sans l'annulation de la totalité de la transaction.
Pourrait être utile dans cette situation.