J'ai une procedure je vous en donne un exemple de test
avec des trsnasctions imbriquée !
je veux pouvoir faire un rollback sur juste un partie precise
et voici le message retour avec erreur d'erreur !
je suppose qu'il doit y avoir un truc de mal ecrit
par ailleurs le commit fonctionne bien !
0
1
2
Serveur : Msg 6401, Niveau 16, État 1, Procédure test, Ligne 27
Impossible d'annuler (ROLLBACK) T1. Ni transaction ni point d'enregistrement
trouvés.
Rollback T1
2
Serveur : Msg 266, Niveau 16, État 2, Procédure test, Ligne 36
Le compte des transactions après EXECUTE indique qu'il manque une
instruction COMMIT ou ROLLBACK TRANSACTION. Compte précédent = 0, compte en
cours = 1.
1
--****Procedure !!!
CREATE PROCEDURE test
as
Declare @ZOZO int
Print @@trancount
BEGIN tran
Print @@trancount
SELECT top 1 @ZOZO = 5 FROM RechercheSociete
Begin tran T1
Print @@trancount
if @ZOZO = 5
begin
Commit tran T1
Print 'commit T1'
Print @@trancount
end
else
begin
rollback tran T1
Print 'Rollback T1'
Print @@trancount
end
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Christian Robert
Dans votre exemple il faut corriger le code pour que cela fonctionne :
--****Procedure !!!
ALTER PROCEDURE test as Declare @ZOZO int Print @@trancount
BEGIN tran X Print @@trancount SELECT top 1 @ZOZO = 4 FROM Person.Contact
Begin tran T1 Print @@trancount if @ZOZO = 5 begin Commit tran T1 Print 'commit T1' Print @@trancount end else begin rollback tran X Print 'Rollback T1' Print @@trancount end commit Tran
Print @@trancount
Si l'on fait un Rollback, le rollback doit se faire sur la transaction la plus externe (ici x, c'est à dire la premiere qui a été démarrée). De plus la valeur (dans votre exemple 5) ne faisait pas de ROLLBACK.
Pour faire un ROLLBACK "partiel", c'est à dire sur la portion situé entre le SAVE TRAN et ROLLBACK j'écris ceci :
--****Procedure !!!
ALTER PROCEDURE test as Declare @ZOZO int Print @@trancount
BEGIN tran X Print @@trancount SELECT top 1 @ZOZO = 4 FROM Person.Contact
Save tran T1 Print @@trancount if @ZOZO = 5 begin Commit tran T1 Print 'commit T1' Print @@trancount end else begin rollback tran T1 Print 'Rollback T1' Print @@trancount end commit Tran
Print @@trancount
Le SAVE TRAN crée un point de sauvegarde, et quand on effectue le ROLLBACK on indique que l'on souhaite revenir à l'état de la transaction au point de sauvegarde.
-- Cordialement, Christian Robert http://blogs.developpeur.org/christian/ MCT - Database Development / Database Administration
"Christophe" a écrit :
J'ai une procedure je vous en donne un exemple de test avec des trsnasctions imbriquée ! je veux pouvoir faire un rollback sur juste un partie precise et voici le message retour avec erreur d'erreur !
je suppose qu'il doit y avoir un truc de mal ecrit par ailleurs le commit fonctionne bien !
0 1 2 Serveur : Msg 6401, Niveau 16, État 1, Procédure test, Ligne 27 Impossible d'annuler (ROLLBACK) T1. Ni transaction ni point d'enregistrement trouvés. Rollback T1 2 Serveur : Msg 266, Niveau 16, État 2, Procédure test, Ligne 36 Le compte des transactions après EXECUTE indique qu'il manque une instruction COMMIT ou ROLLBACK TRANSACTION. Compte précédent = 0, compte en cours = 1. 1
--****Procedure !!!
CREATE PROCEDURE test as Declare @ZOZO int Print @@trancount
BEGIN tran Print @@trancount SELECT top 1 @ZOZO = 5 FROM RechercheSociete Begin tran T1 Print @@trancount if @ZOZO = 5 begin Commit tran T1 Print 'commit T1' Print @@trancount end
else
begin rollback tran T1 Print 'Rollback T1' Print @@trancount end
commit Tran Print @@trancount
Dans votre exemple il faut corriger le code pour que cela fonctionne :
--****Procedure !!!
ALTER PROCEDURE test
as
Declare @ZOZO int
Print @@trancount
BEGIN tran X
Print @@trancount
SELECT top 1 @ZOZO = 4 FROM Person.Contact
Begin tran T1
Print @@trancount
if @ZOZO = 5
begin
Commit tran T1
Print 'commit T1'
Print @@trancount
end
else
begin
rollback tran X
Print 'Rollback T1'
Print @@trancount
end
commit Tran
Print @@trancount
Si l'on fait un Rollback, le rollback doit se faire sur la transaction la
plus externe (ici x, c'est à dire la premiere qui a été démarrée). De plus la
valeur (dans votre exemple 5) ne faisait pas de ROLLBACK.
Pour faire un ROLLBACK "partiel", c'est à dire sur la portion situé entre le
SAVE TRAN et ROLLBACK j'écris ceci :
--****Procedure !!!
ALTER PROCEDURE test
as
Declare @ZOZO int
Print @@trancount
BEGIN tran X
Print @@trancount
SELECT top 1 @ZOZO = 4 FROM Person.Contact
Save tran T1
Print @@trancount
if @ZOZO = 5
begin
Commit tran T1
Print 'commit T1'
Print @@trancount
end
else
begin
rollback tran T1
Print 'Rollback T1'
Print @@trancount
end
commit Tran
Print @@trancount
Le SAVE TRAN crée un point de sauvegarde, et quand on effectue le ROLLBACK
on indique que l'on souhaite revenir à l'état de la transaction au point de
sauvegarde.
--
Cordialement,
Christian Robert http://blogs.developpeur.org/christian/
MCT - Database Development / Database Administration
"Christophe" a écrit :
J'ai une procedure je vous en donne un exemple de test
avec des trsnasctions imbriquée !
je veux pouvoir faire un rollback sur juste un partie precise
et voici le message retour avec erreur d'erreur !
je suppose qu'il doit y avoir un truc de mal ecrit
par ailleurs le commit fonctionne bien !
0
1
2
Serveur : Msg 6401, Niveau 16, État 1, Procédure test, Ligne 27
Impossible d'annuler (ROLLBACK) T1. Ni transaction ni point d'enregistrement
trouvés.
Rollback T1
2
Serveur : Msg 266, Niveau 16, État 2, Procédure test, Ligne 36
Le compte des transactions après EXECUTE indique qu'il manque une
instruction COMMIT ou ROLLBACK TRANSACTION. Compte précédent = 0, compte en
cours = 1.
1
--****Procedure !!!
CREATE PROCEDURE test
as
Declare @ZOZO int
Print @@trancount
BEGIN tran
Print @@trancount
SELECT top 1 @ZOZO = 5 FROM RechercheSociete
Begin tran T1
Print @@trancount
if @ZOZO = 5
begin
Commit tran T1
Print 'commit T1'
Print @@trancount
end
else
begin
rollback tran T1
Print 'Rollback T1'
Print @@trancount
end
Dans votre exemple il faut corriger le code pour que cela fonctionne :
--****Procedure !!!
ALTER PROCEDURE test as Declare @ZOZO int Print @@trancount
BEGIN tran X Print @@trancount SELECT top 1 @ZOZO = 4 FROM Person.Contact
Begin tran T1 Print @@trancount if @ZOZO = 5 begin Commit tran T1 Print 'commit T1' Print @@trancount end else begin rollback tran X Print 'Rollback T1' Print @@trancount end commit Tran
Print @@trancount
Si l'on fait un Rollback, le rollback doit se faire sur la transaction la plus externe (ici x, c'est à dire la premiere qui a été démarrée). De plus la valeur (dans votre exemple 5) ne faisait pas de ROLLBACK.
Pour faire un ROLLBACK "partiel", c'est à dire sur la portion situé entre le SAVE TRAN et ROLLBACK j'écris ceci :
--****Procedure !!!
ALTER PROCEDURE test as Declare @ZOZO int Print @@trancount
BEGIN tran X Print @@trancount SELECT top 1 @ZOZO = 4 FROM Person.Contact
Save tran T1 Print @@trancount if @ZOZO = 5 begin Commit tran T1 Print 'commit T1' Print @@trancount end else begin rollback tran T1 Print 'Rollback T1' Print @@trancount end commit Tran
Print @@trancount
Le SAVE TRAN crée un point de sauvegarde, et quand on effectue le ROLLBACK on indique que l'on souhaite revenir à l'état de la transaction au point de sauvegarde.
-- Cordialement, Christian Robert http://blogs.developpeur.org/christian/ MCT - Database Development / Database Administration
"Christophe" a écrit :
J'ai une procedure je vous en donne un exemple de test avec des trsnasctions imbriquée ! je veux pouvoir faire un rollback sur juste un partie precise et voici le message retour avec erreur d'erreur !
je suppose qu'il doit y avoir un truc de mal ecrit par ailleurs le commit fonctionne bien !
0 1 2 Serveur : Msg 6401, Niveau 16, État 1, Procédure test, Ligne 27 Impossible d'annuler (ROLLBACK) T1. Ni transaction ni point d'enregistrement trouvés. Rollback T1 2 Serveur : Msg 266, Niveau 16, État 2, Procédure test, Ligne 36 Le compte des transactions après EXECUTE indique qu'il manque une instruction COMMIT ou ROLLBACK TRANSACTION. Compte précédent = 0, compte en cours = 1. 1
--****Procedure !!!
CREATE PROCEDURE test as Declare @ZOZO int Print @@trancount
BEGIN tran Print @@trancount SELECT top 1 @ZOZO = 5 FROM RechercheSociete Begin tran T1 Print @@trancount if @ZOZO = 5 begin Commit tran T1 Print 'commit T1' Print @@trancount end
else
begin rollback tran T1 Print 'Rollback T1' Print @@trancount end
commit Tran Print @@trancount
Christian Robert
Dans la 2ème requête çà n'est pas :
Commit Tran T1
Mais :
Commit Tran
Et il faut supprimer le Commit Tran final pour que cela fonctionne sans problème.
La faute au copier/coller trop rapide
-- Cordialement, Christian Robert http://blogs.developpeur.org/christian/ MCT - Database Development / Database Administration
"Christian Robert" a écrit :
Dans votre exemple il faut corriger le code pour que cela fonctionne :
--****Procedure !!!
ALTER PROCEDURE test as Declare @ZOZO int Print @@trancount
BEGIN tran X Print @@trancount SELECT top 1 @ZOZO = 4 FROM Person.Contact
Begin tran T1 Print @@trancount if @ZOZO = 5 begin Commit tran T1 Print 'commit T1' Print @@trancount end else begin rollback tran X Print 'Rollback T1' Print @@trancount end commit Tran
Print @@trancount
Si l'on fait un Rollback, le rollback doit se faire sur la transaction la plus externe (ici x, c'est à dire la premiere qui a été démarrée). De plus la valeur (dans votre exemple 5) ne faisait pas de ROLLBACK.
Pour faire un ROLLBACK "partiel", c'est à dire sur la portion situé entre le SAVE TRAN et ROLLBACK j'écris ceci :
--****Procedure !!!
ALTER PROCEDURE test as Declare @ZOZO int Print @@trancount
BEGIN tran X Print @@trancount SELECT top 1 @ZOZO = 4 FROM Person.Contact
Save tran T1 Print @@trancount if @ZOZO = 5 begin Commit tran T1 Print 'commit T1' Print @@trancount end else begin rollback tran T1 Print 'Rollback T1' Print @@trancount end commit Tran
Print @@trancount
Le SAVE TRAN crée un point de sauvegarde, et quand on effectue le ROLLBACK on indique que l'on souhaite revenir à l'état de la transaction au point de sauvegarde.
-- Cordialement, Christian Robert http://blogs.developpeur.org/christian/ MCT - Database Development / Database Administration
"Christophe" a écrit :
> J'ai une procedure je vous en donne un exemple de test > avec des trsnasctions imbriquée ! > je veux pouvoir faire un rollback sur juste un partie precise > et voici le message retour avec erreur d'erreur ! > > je suppose qu'il doit y avoir un truc de mal ecrit > par ailleurs le commit fonctionne bien ! > > > 0 > 1 > 2 > Serveur : Msg 6401, Niveau 16, État 1, Procédure test, Ligne 27 > Impossible d'annuler (ROLLBACK) T1. Ni transaction ni point d'enregistrement > trouvés. > Rollback T1 > 2 > Serveur : Msg 266, Niveau 16, État 2, Procédure test, Ligne 36 > Le compte des transactions après EXECUTE indique qu'il manque une > instruction COMMIT ou ROLLBACK TRANSACTION. Compte précédent = 0, compte en > cours = 1. > 1 > > > > --****Procedure !!! > > CREATE PROCEDURE test > as > Declare @ZOZO int > Print @@trancount > > BEGIN tran > Print @@trancount > SELECT top 1 @ZOZO = 5 FROM RechercheSociete > Begin tran T1 > Print @@trancount > if @ZOZO = 5 > begin > Commit tran T1 > Print 'commit T1' > Print @@trancount > end > > else > > begin > rollback tran T1 > Print 'Rollback T1' > Print @@trancount > end > > > commit Tran > Print @@trancount > > > >
Dans la 2ème requête çà n'est pas :
Commit Tran T1
Mais :
Commit Tran
Et il faut supprimer le Commit Tran final pour que cela fonctionne sans
problème.
La faute au copier/coller trop rapide
--
Cordialement,
Christian Robert http://blogs.developpeur.org/christian/
MCT - Database Development / Database Administration
"Christian Robert" a écrit :
Dans votre exemple il faut corriger le code pour que cela fonctionne :
--****Procedure !!!
ALTER PROCEDURE test
as
Declare @ZOZO int
Print @@trancount
BEGIN tran X
Print @@trancount
SELECT top 1 @ZOZO = 4 FROM Person.Contact
Begin tran T1
Print @@trancount
if @ZOZO = 5
begin
Commit tran T1
Print 'commit T1'
Print @@trancount
end
else
begin
rollback tran X
Print 'Rollback T1'
Print @@trancount
end
commit Tran
Print @@trancount
Si l'on fait un Rollback, le rollback doit se faire sur la transaction la
plus externe (ici x, c'est à dire la premiere qui a été démarrée). De plus la
valeur (dans votre exemple 5) ne faisait pas de ROLLBACK.
Pour faire un ROLLBACK "partiel", c'est à dire sur la portion situé entre le
SAVE TRAN et ROLLBACK j'écris ceci :
--****Procedure !!!
ALTER PROCEDURE test
as
Declare @ZOZO int
Print @@trancount
BEGIN tran X
Print @@trancount
SELECT top 1 @ZOZO = 4 FROM Person.Contact
Save tran T1
Print @@trancount
if @ZOZO = 5
begin
Commit tran T1
Print 'commit T1'
Print @@trancount
end
else
begin
rollback tran T1
Print 'Rollback T1'
Print @@trancount
end
commit Tran
Print @@trancount
Le SAVE TRAN crée un point de sauvegarde, et quand on effectue le ROLLBACK
on indique que l'on souhaite revenir à l'état de la transaction au point de
sauvegarde.
--
Cordialement,
Christian Robert http://blogs.developpeur.org/christian/
MCT - Database Development / Database Administration
"Christophe" a écrit :
> J'ai une procedure je vous en donne un exemple de test
> avec des trsnasctions imbriquée !
> je veux pouvoir faire un rollback sur juste un partie precise
> et voici le message retour avec erreur d'erreur !
>
> je suppose qu'il doit y avoir un truc de mal ecrit
> par ailleurs le commit fonctionne bien !
>
>
> 0
> 1
> 2
> Serveur : Msg 6401, Niveau 16, État 1, Procédure test, Ligne 27
> Impossible d'annuler (ROLLBACK) T1. Ni transaction ni point d'enregistrement
> trouvés.
> Rollback T1
> 2
> Serveur : Msg 266, Niveau 16, État 2, Procédure test, Ligne 36
> Le compte des transactions après EXECUTE indique qu'il manque une
> instruction COMMIT ou ROLLBACK TRANSACTION. Compte précédent = 0, compte en
> cours = 1.
> 1
>
>
>
> --****Procedure !!!
>
> CREATE PROCEDURE test
> as
> Declare @ZOZO int
> Print @@trancount
>
> BEGIN tran
> Print @@trancount
> SELECT top 1 @ZOZO = 5 FROM RechercheSociete
> Begin tran T1
> Print @@trancount
> if @ZOZO = 5
> begin
> Commit tran T1
> Print 'commit T1'
> Print @@trancount
> end
>
> else
>
> begin
> rollback tran T1
> Print 'Rollback T1'
> Print @@trancount
> end
>
>
> commit Tran
> Print @@trancount
>
>
>
>
Et il faut supprimer le Commit Tran final pour que cela fonctionne sans problème.
La faute au copier/coller trop rapide
-- Cordialement, Christian Robert http://blogs.developpeur.org/christian/ MCT - Database Development / Database Administration
"Christian Robert" a écrit :
Dans votre exemple il faut corriger le code pour que cela fonctionne :
--****Procedure !!!
ALTER PROCEDURE test as Declare @ZOZO int Print @@trancount
BEGIN tran X Print @@trancount SELECT top 1 @ZOZO = 4 FROM Person.Contact
Begin tran T1 Print @@trancount if @ZOZO = 5 begin Commit tran T1 Print 'commit T1' Print @@trancount end else begin rollback tran X Print 'Rollback T1' Print @@trancount end commit Tran
Print @@trancount
Si l'on fait un Rollback, le rollback doit se faire sur la transaction la plus externe (ici x, c'est à dire la premiere qui a été démarrée). De plus la valeur (dans votre exemple 5) ne faisait pas de ROLLBACK.
Pour faire un ROLLBACK "partiel", c'est à dire sur la portion situé entre le SAVE TRAN et ROLLBACK j'écris ceci :
--****Procedure !!!
ALTER PROCEDURE test as Declare @ZOZO int Print @@trancount
BEGIN tran X Print @@trancount SELECT top 1 @ZOZO = 4 FROM Person.Contact
Save tran T1 Print @@trancount if @ZOZO = 5 begin Commit tran T1 Print 'commit T1' Print @@trancount end else begin rollback tran T1 Print 'Rollback T1' Print @@trancount end commit Tran
Print @@trancount
Le SAVE TRAN crée un point de sauvegarde, et quand on effectue le ROLLBACK on indique que l'on souhaite revenir à l'état de la transaction au point de sauvegarde.
-- Cordialement, Christian Robert http://blogs.developpeur.org/christian/ MCT - Database Development / Database Administration
"Christophe" a écrit :
> J'ai une procedure je vous en donne un exemple de test > avec des trsnasctions imbriquée ! > je veux pouvoir faire un rollback sur juste un partie precise > et voici le message retour avec erreur d'erreur ! > > je suppose qu'il doit y avoir un truc de mal ecrit > par ailleurs le commit fonctionne bien ! > > > 0 > 1 > 2 > Serveur : Msg 6401, Niveau 16, État 1, Procédure test, Ligne 27 > Impossible d'annuler (ROLLBACK) T1. Ni transaction ni point d'enregistrement > trouvés. > Rollback T1 > 2 > Serveur : Msg 266, Niveau 16, État 2, Procédure test, Ligne 36 > Le compte des transactions après EXECUTE indique qu'il manque une > instruction COMMIT ou ROLLBACK TRANSACTION. Compte précédent = 0, compte en > cours = 1. > 1 > > > > --****Procedure !!! > > CREATE PROCEDURE test > as > Declare @ZOZO int > Print @@trancount > > BEGIN tran > Print @@trancount > SELECT top 1 @ZOZO = 5 FROM RechercheSociete > Begin tran T1 > Print @@trancount > if @ZOZO = 5 > begin > Commit tran T1 > Print 'commit T1' > Print @@trancount > end > > else > > begin > rollback tran T1 > Print 'Rollback T1' > Print @@trancount > end > > > commit Tran > Print @@trancount > > > >
Christophe
Merci ca fonctionne en effet !
"Christian Robert" <christian.robert(sansspam)@winwise.fr> a écrit dans le message de news:
Dans la 2ème requête çà n'est pas :
Commit Tran T1
Mais :
Commit Tran
Et il faut supprimer le Commit Tran final pour que cela fonctionne sans problème.
La faute au copier/coller trop rapide
-- Cordialement, Christian Robert http://blogs.developpeur.org/christian/ MCT - Database Development / Database Administration
"Christian Robert" a écrit :
> Dans votre exemple il faut corriger le code pour que cela fonctionne : > > --****Procedure !!! > > ALTER PROCEDURE test > as > Declare @ZOZO int > Print @@trancount > > BEGIN tran X > Print @@trancount > SELECT top 1 @ZOZO = 4 FROM Person.Contact > > Begin tran T1 > Print @@trancount > if @ZOZO = 5 > begin > Commit tran T1 > Print 'commit T1' > Print @@trancount > end > else > begin > rollback tran X > Print 'Rollback T1' > Print @@trancount > end > commit Tran > > Print @@trancount > > Si l'on fait un Rollback, le rollback doit se faire sur la transaction
la
> plus externe (ici x, c'est à dire la premiere qui a été démarrée). De
plus la
> valeur (dans votre exemple 5) ne faisait pas de ROLLBACK. > > Pour faire un ROLLBACK "partiel", c'est à dire sur la portion situé
entre le
> SAVE TRAN et ROLLBACK j'écris ceci : > > > > --****Procedure !!! > > ALTER PROCEDURE test > as > Declare @ZOZO int > Print @@trancount > > BEGIN tran X > Print @@trancount > SELECT top 1 @ZOZO = 4 FROM Person.Contact > > Save tran T1 > Print @@trancount > if @ZOZO = 5 > begin > Commit tran T1 > Print 'commit T1' > Print @@trancount > end > else > begin > rollback tran T1 > Print 'Rollback T1' > Print @@trancount > end > commit Tran > > Print @@trancount > > Le SAVE TRAN crée un point de sauvegarde, et quand on effectue le
ROLLBACK
> on indique que l'on souhaite revenir à l'état de la transaction au point
de
> sauvegarde. > > -- > Cordialement, > Christian Robert http://blogs.developpeur.org/christian/ > MCT - Database Development / Database Administration > > > "Christophe" a écrit : > > > J'ai une procedure je vous en donne un exemple de test > > avec des trsnasctions imbriquée ! > > je veux pouvoir faire un rollback sur juste un partie precise > > et voici le message retour avec erreur d'erreur ! > > > > je suppose qu'il doit y avoir un truc de mal ecrit > > par ailleurs le commit fonctionne bien ! > > > > > > 0 > > 1 > > 2 > > Serveur : Msg 6401, Niveau 16, État 1, Procédure test, Ligne 27 > > Impossible d'annuler (ROLLBACK) T1. Ni transaction ni point
d'enregistrement
> > trouvés. > > Rollback T1 > > 2 > > Serveur : Msg 266, Niveau 16, État 2, Procédure test, Ligne 36 > > Le compte des transactions après EXECUTE indique qu'il manque une > > instruction COMMIT ou ROLLBACK TRANSACTION. Compte précédent = 0,
"Christian Robert" <christian.robert(sansspam)@winwise.fr> a écrit dans le
message de news:435C6625-299A-46B9-A33F-A38E78EB1073@microsoft.com...
Dans la 2ème requête çà n'est pas :
Commit Tran T1
Mais :
Commit Tran
Et il faut supprimer le Commit Tran final pour que cela fonctionne sans
problème.
La faute au copier/coller trop rapide
--
Cordialement,
Christian Robert http://blogs.developpeur.org/christian/
MCT - Database Development / Database Administration
"Christian Robert" a écrit :
> Dans votre exemple il faut corriger le code pour que cela fonctionne :
>
> --****Procedure !!!
>
> ALTER PROCEDURE test
> as
> Declare @ZOZO int
> Print @@trancount
>
> BEGIN tran X
> Print @@trancount
> SELECT top 1 @ZOZO = 4 FROM Person.Contact
>
> Begin tran T1
> Print @@trancount
> if @ZOZO = 5
> begin
> Commit tran T1
> Print 'commit T1'
> Print @@trancount
> end
> else
> begin
> rollback tran X
> Print 'Rollback T1'
> Print @@trancount
> end
> commit Tran
>
> Print @@trancount
>
> Si l'on fait un Rollback, le rollback doit se faire sur la transaction
la
> plus externe (ici x, c'est à dire la premiere qui a été démarrée). De
plus la
> valeur (dans votre exemple 5) ne faisait pas de ROLLBACK.
>
> Pour faire un ROLLBACK "partiel", c'est à dire sur la portion situé
entre le
> SAVE TRAN et ROLLBACK j'écris ceci :
>
>
>
> --****Procedure !!!
>
> ALTER PROCEDURE test
> as
> Declare @ZOZO int
> Print @@trancount
>
> BEGIN tran X
> Print @@trancount
> SELECT top 1 @ZOZO = 4 FROM Person.Contact
>
> Save tran T1
> Print @@trancount
> if @ZOZO = 5
> begin
> Commit tran T1
> Print 'commit T1'
> Print @@trancount
> end
> else
> begin
> rollback tran T1
> Print 'Rollback T1'
> Print @@trancount
> end
> commit Tran
>
> Print @@trancount
>
> Le SAVE TRAN crée un point de sauvegarde, et quand on effectue le
ROLLBACK
> on indique que l'on souhaite revenir à l'état de la transaction au point
de
> sauvegarde.
>
> --
> Cordialement,
> Christian Robert http://blogs.developpeur.org/christian/
> MCT - Database Development / Database Administration
>
>
> "Christophe" a écrit :
>
> > J'ai une procedure je vous en donne un exemple de test
> > avec des trsnasctions imbriquée !
> > je veux pouvoir faire un rollback sur juste un partie precise
> > et voici le message retour avec erreur d'erreur !
> >
> > je suppose qu'il doit y avoir un truc de mal ecrit
> > par ailleurs le commit fonctionne bien !
> >
> >
> > 0
> > 1
> > 2
> > Serveur : Msg 6401, Niveau 16, État 1, Procédure test, Ligne 27
> > Impossible d'annuler (ROLLBACK) T1. Ni transaction ni point
d'enregistrement
> > trouvés.
> > Rollback T1
> > 2
> > Serveur : Msg 266, Niveau 16, État 2, Procédure test, Ligne 36
> > Le compte des transactions après EXECUTE indique qu'il manque une
> > instruction COMMIT ou ROLLBACK TRANSACTION. Compte précédent = 0,
"Christian Robert" <christian.robert(sansspam)@winwise.fr> a écrit dans le message de news:
Dans la 2ème requête çà n'est pas :
Commit Tran T1
Mais :
Commit Tran
Et il faut supprimer le Commit Tran final pour que cela fonctionne sans problème.
La faute au copier/coller trop rapide
-- Cordialement, Christian Robert http://blogs.developpeur.org/christian/ MCT - Database Development / Database Administration
"Christian Robert" a écrit :
> Dans votre exemple il faut corriger le code pour que cela fonctionne : > > --****Procedure !!! > > ALTER PROCEDURE test > as > Declare @ZOZO int > Print @@trancount > > BEGIN tran X > Print @@trancount > SELECT top 1 @ZOZO = 4 FROM Person.Contact > > Begin tran T1 > Print @@trancount > if @ZOZO = 5 > begin > Commit tran T1 > Print 'commit T1' > Print @@trancount > end > else > begin > rollback tran X > Print 'Rollback T1' > Print @@trancount > end > commit Tran > > Print @@trancount > > Si l'on fait un Rollback, le rollback doit se faire sur la transaction
la
> plus externe (ici x, c'est à dire la premiere qui a été démarrée). De
plus la
> valeur (dans votre exemple 5) ne faisait pas de ROLLBACK. > > Pour faire un ROLLBACK "partiel", c'est à dire sur la portion situé
entre le
> SAVE TRAN et ROLLBACK j'écris ceci : > > > > --****Procedure !!! > > ALTER PROCEDURE test > as > Declare @ZOZO int > Print @@trancount > > BEGIN tran X > Print @@trancount > SELECT top 1 @ZOZO = 4 FROM Person.Contact > > Save tran T1 > Print @@trancount > if @ZOZO = 5 > begin > Commit tran T1 > Print 'commit T1' > Print @@trancount > end > else > begin > rollback tran T1 > Print 'Rollback T1' > Print @@trancount > end > commit Tran > > Print @@trancount > > Le SAVE TRAN crée un point de sauvegarde, et quand on effectue le
ROLLBACK
> on indique que l'on souhaite revenir à l'état de la transaction au point
de
> sauvegarde. > > -- > Cordialement, > Christian Robert http://blogs.developpeur.org/christian/ > MCT - Database Development / Database Administration > > > "Christophe" a écrit : > > > J'ai une procedure je vous en donne un exemple de test > > avec des trsnasctions imbriquée ! > > je veux pouvoir faire un rollback sur juste un partie precise > > et voici le message retour avec erreur d'erreur ! > > > > je suppose qu'il doit y avoir un truc de mal ecrit > > par ailleurs le commit fonctionne bien ! > > > > > > 0 > > 1 > > 2 > > Serveur : Msg 6401, Niveau 16, État 1, Procédure test, Ligne 27 > > Impossible d'annuler (ROLLBACK) T1. Ni transaction ni point
d'enregistrement
> > trouvés. > > Rollback T1 > > 2 > > Serveur : Msg 266, Niveau 16, État 2, Procédure test, Ligne 36 > > Le compte des transactions après EXECUTE indique qu'il manque une > > instruction COMMIT ou ROLLBACK TRANSACTION. Compte précédent = 0,