|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : avril 2011 Messages : 4 ![]() |
J'ai un souci de compréhension de l'incrémentation de @@trancount.
Je suis dans une transaction et lorsque je regarde la valeur de trancount avant une instruction sql il est à 1 puis après mon instruction il est à 0 si l'instruction a échoué et à 1 si elle a réussi. Il me semblait que l'incrémentation de @@trancount dépendait de begin tran ou rollback ou commit et non d'une simple instruction ??? je cherche une explication merci |
|
|
00
|
|
|
#2 |
![]() ![]() ![]() David BARBARINExpert SQL Server Inscription : août 2005 Messages : 3 723 ![]() |
Postez nous votre code
++ |
|
00
|
|
|
#3 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
C'est normal. Tout ROLLBACK purge le compteur et annule la transaction. En revanche chaque COMMIT décrémente le @@TRANCOUNT et s'il est à 1 valide la transaction et le fait passer à zéro.
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 * * * * * |
|
10
|
|
|
#4 | ||
|
Invité de passage
![]() Inscription : avril 2011 Messages : 4 ![]() |
Seulement le Rollback arrive après.
Je ne comprends pas pourquoi le compteur C est à 0, Merci Voici le code : Code :
le compteur A est à 1 le compteur B est à 1 Msg 4860, Niveau 16, État 1, Ligne 1 Chargement en bloc impossible. Le fichier 'M:\Elocal v2\V2.01\FICHIER PLAT\TAMPON_INTERCO_M4.txt' n'existe pas. le compteur C est à 0 le compteur D est à 0 le compteur E est à 1 |
||
|
|
00
|
|
|
#5 |
![]() ![]() ![]() David BARBARINExpert SQL Server Inscription : août 2005 Messages : 3 723 ![]() |
Vous devez avoir XACT_ABORT à ON dans votre cas.
Ce paramétre annule toute transaction si une erreur se produit. ++ |
|
00
|
|
|
#6 |
|
Invité de passage
![]() Inscription : avril 2011 Messages : 4 ![]() |
Merci de votre retour!
XACT_ABORT est bien sur OFF le souci ne vient a priori pas de là! J'ai essayé la même chose en remplaçant la partie "Bulk Insert ..." par du select/update/delete et là pas de problème j'obtiens bien des compteurs C à 1 même après une erreur d'exécution d'instruction. J'ai l'impression que cela ne réagit pas pareil avec du BuLK INSERT OU CREATE... Je suis preneuse si quelqu'un a une autre explication ... |
|
|
00
|
|
|
#7 |
![]() ![]() ![]() David BARBARINExpert SQL Server Inscription : août 2005 Messages : 3 723 ![]() |
J'ai repris votre code tel quel pour tester et chez moi je n'ai pas de souci.
Essayez quand même en forcant le paramètre de votre session avec un SET XACT_ABORT OFF avant l'exécution de votre code. ++ |
|
00
|
|
|
#8 |
|
Invité de passage
![]() Inscription : avril 2011 Messages : 4 ![]() |
J'ai déjà essayé suite à votre retour.
Mais chez moi cela fonctionne aussi lorsque je n'ai pas l'objet TABLE déjà en base. Mais lorsque la table (TAMPON_RETRO_INTERCO_M4) existe déjà en base mais que le fichier txt n'est pas à l'endroit prévu cela ne fonctionne plus. De même lorsque je veux créer un table qui existe déjà dans la base j'ai le même souci. J'ai l'impression que cela dépend du niveau d'erreur un truc dans le genre ... Merci à vous |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com