2012-08-05 3 views
1

Voici un extrait de ce que j'essaie d'obtenir. J'ai une transaction imbriquée 'TRAN2', que je ne peux pas rollbackRétablissement de l'erreur de lancement de transaction imbriquée dans TSQL

SELECT 'Before', * FROM [table] WHERE field .. 

BEGIN TRAN tran1 
UPDATE [table] set field ... WHERE field .. 

BEGIN TRAN tran2 
    SELECT 'During', * FROM [table] WHERE field .. 
    select @@trancount as 'transactioncount' 

    rollback tran tran2 

rollback TRAN tran1 
SELECT 'After', * FROM [table] WHERE field .. 

me lancer cette erreur

Msg 6401, niveau 16, état 1, ligne 13
ne peut pas rouler en arrière TRAN2 . Aucune transaction ou point de sauvegarde de ce nom n'a été trouvé.

mais le @@trancount me donne 2 opérations à ce moment

+3

Lire Paul Randal [SQL Server Mythe par jour: les transactions imbriquées sont réelles] (http://www.sqlskills.com/BLOGS/PAUL/post/A-SQL-Server-DBA-myth-a-day-% 282630% 29-imbriqué-transactions-are-real.aspx) - il n'y a pas de support pour les transactions imbriquées dans SQL Server. Syntaxiquement, oui - vous pouvez le faire - mais en réalité, vous n'avez jamais vraiment de transactions imbriquées ... –

Répondre

3

Au lieu de begin trans tran2, utilisez save transaction tran2.

Ceci crée un point de sauvegarde dans la transaction externe, que vous pouvez restaurer.

Questions connexes