11
votes

SQL Server 2005: Pourquoi les transactions de noms?

J'ai trié l'ensemble de l'opération de transaction imbriquée dans SQL Server, et j'ai brillé ces pépites de compréhension du comportement de trans ':

  • lors de la nidification des transactions, seulement le la plus externe commis sera réellement commettre.
  • "commettre trans txn_name", quand imbriqué , s'appliquera toujours à la plus interne transaction, même si txn_name fait référence à une transaction externe.
  • "Tran de rollback" (aucun nom), même dans une transaction interne, retournera toutes transactions.
  • "Noms de rollback TXN_Name" - TXN_Name doit Reportez-vous au nom TXN le plus à l'extérieur. Sinon, cela échouera.

    Les étant donné, y a-t-il un avantage des transactions de dénomination? Vous ne pouvez pas l'utiliser pour cibler une transaction spécifique, que ce soit pour commit ou retourner. Est-ce seulement à des fins de commencement du code?

    merci,

    yoni


1 commentaires

Une raison de plus, ne vaut pas la peine d'une réponse imo, est ici .


3 Réponses :


2
votes

Vous pouvez avoir des procédures annuler uniquement leur propre travail sur l'erreur, ce qui permet à l'appelant de décider de demander à Whather d'abandonner toute la transaction ou de récupérer et d'essayer un autre chemin. Voir Traitement des exceptions et transactions imbriquées pour une procédure modèle qui permet ce comportement atomique.


6 commentaires

Vraiment? Mais le DOC dit que vous ne pouvez pas renvoyer une transaction intérieure imbriquée, vous ne pouvez rouler que la transaction la plus externe. Je ne vous conteste pas parce que je ne l'ai pas essayé, je suis juste curieux, ce qui est la façon dont cela fonctionne réellement.


Vous pouvez retourner à un point de sauvegarde. Je pense que ce n'est pas la même chose qu'une transaction nommée, mais je pense que c'est ce que vous êtes vraiment après.


Remus - Bon point sur le point de sauvegarde. Sinon, (Sinon d'utilisation des points de sauvegarde, que je ne suis actuellement pas), aucun avantage?


Les transactions de dénomination peuvent attraper des erreurs d'application lorsque l'imbrication de la transaction n'est pas celle attendue par les développeurs, car si un Component est attmement de faire rouler le mauvais nom, une erreur est générée.


Ok, merci, ça a du sens. Transactions imbriquées! = Points de sauvegarde.


BTW, j'ai lu votre article que vous avez lié à votre réponse. Cela ressemble à un excellent motif et je vais essayer d'aller de l'avant. Merci.



0
votes

L'idée est de faire rouler une partie de votre travail, comme une transaction imbriquée. Ne fonctionne pas toujours comme prévu. Les procédures stockées à l'aide de la manipulation d'erreurs de style ancien et des points de sauvegarde peuvent ne pas fonctionner comme prévu quand elles sont utilisées avec toly ... Catch Blocks: Évitez de mélanger les anciens et les nouveaux styles de manutention d'erreur.

Déjà discuté ici @@ error et / ou essayer - attraper


1 commentaires

Mais cela ne roule pas une partie de votre travail. Transactions de nidification incréments @@ TranCount. Rouler une transaction imbriquée roule du tout. Sauf si vous parlez de points de sauvegarde.



8
votes

Effectivement, il ne s'agit que d'un membre des programmeurs Mémoire. Si vous traitez avec un TX qui possède un certain nombre de transactions intérieures, donner à chaque nom de signification peut vous aider à vous assurer que les transactions sont correctement imbriquées et peuvent attraper des erreurs logiques.


0 commentaires