|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : mars 2005 Messages : 4 ![]() |
Salut,
J'ai une Transaction avec plusieurs instructions et je voudrais faire un ROLLBACK s'il c'est passé une erreur ou si il y a eu une violation de contrainte, et je ne trouve pas comment faire. Exemple : BEGIN TRANSACTION trans; INSERT INTO GROUPE (NUMGROUPE, NOMGROUPE) VALUES (1,'TEST'); -- ici violation PK -- INSERT INTO GROUPE (NUMGROUPE, NOMGROUPE) VALUES (12,'TEST'); IF @@ERROR <> 0 ROLLBACK TRANSACTION trans ELSE COMMIT; En fait le @@ERROR ne fonctionne pas car il est seulement valide pour la dernière instruction. ici la première instruction me viole une contrainte de PK. Mais la deuxième est bonne donc elle est enregistrée et @@ERROR = 0 donc COMMIT.. @@TOTAL_ERRORS ne fonctionne pas non plus lui il me dis toujours 0 quand je fais un print. Puis pas question que je teste @@ERROR après chaque instruction car je peux en avoir 100000 ... (c'est un peu plus complexe que l'exemple forcément..) Pour résumé si y a la moindre erreur dans la transaction je voudrai faire un ROLLBACK.. Merci!!!! |
|
|
00
|
|
|
#2 | ||
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 959 ![]() |
Code :
1) transaction et gestion des erreurs : http://sqlpro.developpez.com/cours/s...nsactsql/#L4.6 2) transactions imbriquées : http://sqlpro.developpez.com/cours/s...ns-imbriquees/ A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
||
|
00
|
|
|
#3 | ||
|
Invité de passage
![]() Inscription : mars 2005 Messages : 4 ![]() |
ça ya pas de problème c'est ce que je fais en ce moment. mais comme je dis dans le sujet dans ma transaction je peux avoir 50000 instructions. Donc avec ça je suis obligé de mettre 50000 fois "IF @@ERROR <> 0 GOTO LBL_ERROR"..
Déja je trouve cela assez crade... ce que je fais pour l'instant à la fiin de l'élaboration de la requète c'est ça : Code :
1 : Cela m'allonge le temps d'exécution de près de 35%!!! 2 : La requète est élaborée sur le client distant (internet ou local) d'un serveur d'application. Il y a donc téléchargement de la requète et avec 30% de taille en plus c'est 30% de temps de perdu en téléchargement 3 : c'est vraiment sale comme méthode et rien que ça ça me perturbe :p ps : SQL SERVEUR 2000 donc pas de TRY CATCH Merci!! |
||
|
|
00
|
|
|
#4 |
|
Invité de passage
![]() Inscription : mars 2005 Messages : 4 ![]() |
Pour le deuxième point je le règle partiellement en faisant un deflate.. c'est déjà mieux pour le téléchargement. pour avoir un ordre d'idée 100000 lignes donc 50000 instruction + 50000 gestion d'erreur = 8M non compressé et 290k compressé.
|
|
|
00
|
|
|
#5 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 959 ![]() |
En version 2000 c'est la seule méthode valable... Passez à 2005 !
A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#6 |
|
Invité de passage
![]() Inscription : mars 2005 Messages : 4 ![]() |
ouai j'y pense mais bon le problème c'est la migration des clients existants.. enfin.. ils auraient pu y penser avant..
merci de ta réponse |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com