OVH Cloud OVH Cloud

@@error, rollback et commit

2 réponses
Avatar
Ch.
Bonjour à tous,

je possede une procedure stockée qui execute des inserts
seulement j'aimerais qu'a la fin de la procedure si il y'a eu une erreur il
fasse un rollback

hors la variable systeme @@error ne renvoi pas d'erreur si la derniere
requete est ok, ce qui n'est pas cool !

comment peut'on savoir si dans le deroulement de la procedure entiere il y'a
eu une erreur alors je rollback ?


pour le moment la seule chose que j'ai trouvé c'est de creer une variable
int et à la suite de chaque requete
j'additionne la variable à @@error

et à la fin si j'ai ma variable > 0 alors je rollback ?

je suis en SQL 2005 peut etre que try catch peut etre une solution ?


Merci .......

2 réponses

Avatar
Test recherche
Bonjour,
pour ma part, j'effectue ceci mais je suis sous SQL 2000

/* j'ouvre une transaction */
Begin Tran

/* Après chaque instruction */
/* Je récupère le code erreur */
Set @l_ReturnCode = @@Error
/* Si erreur, je sort */
If @l_ReturnCode <> 0
Goto Erreur



/* Pas d'Erreur : fin de la transaction */
Commit Transaction
Return @l_ReturnCode

/* Gestion de l'erreur */
Erreur:
/* J'annule la transaction */
Rollback Transaction
Return @l_ReturnCode

Voilà
Stéphane


"Ch." a écrit dans le message de news:
%23nzge%
Bonjour à tous,

je possede une procedure stockée qui execute des inserts
seulement j'aimerais qu'a la fin de la procedure si il y'a eu une erreur
il fasse un rollback

hors la variable systeme @@error ne renvoi pas d'erreur si la derniere
requete est ok, ce qui n'est pas cool !

comment peut'on savoir si dans le deroulement de la procedure entiere il
y'a eu une erreur alors je rollback ?


pour le moment la seule chose que j'ai trouvé c'est de creer une variable
int et à la suite de chaque requete
j'additionne la variable à @@error

et à la fin si j'ai ma variable > 0 alors je rollback ?

je suis en SQL 2005 peut etre que try catch peut etre une solution ?


Merci .......




Avatar
Sylvain Lafontaine
L'autre possibilité serait d'utiliser l'option SET XACT_ABORT ON.

--
Sylvain Lafontaine, ing.
MVP - Technologies Virtual-PC
E-mail: sylvain aei ca (fill the blanks, no spam please)


"Ch." wrote in message
news:%23nzge%
Bonjour à tous,

je possede une procedure stockée qui execute des inserts
seulement j'aimerais qu'a la fin de la procedure si il y'a eu une erreur
il fasse un rollback

hors la variable systeme @@error ne renvoi pas d'erreur si la derniere
requete est ok, ce qui n'est pas cool !

comment peut'on savoir si dans le deroulement de la procedure entiere il
y'a eu une erreur alors je rollback ?


pour le moment la seule chose que j'ai trouvé c'est de creer une variable
int et à la suite de chaque requete
j'additionne la variable à @@error

et à la fin si j'ai ma variable > 0 alors je rollback ?

je suis en SQL 2005 peut etre que try catch peut etre une solution ?


Merci .......