j'ai une procédure stockée qui réalise des opérations dans une transaction.
L'exécution de cette transaction peut parfois être longue et est parfois
interrompue par une expiration du délai par ADO. J'ai remarqué que
contrairement à ce qu'il se passe losqu'il y a une erreur SQL, la
transaction n'est pas annulée et à prioiri reste active. Donc toutes les
actions qui suivent dans le cadre de la même connexion ADO sont, à tors,
intégrées à la transaction en cours.
Cela me pose un problème. Est ce que quelqu'un a déjà remarqué se
comportement? Y a t'il un moyen pour qu'une expiration du délais ADO annule
toute transaction SQL active liée à cette connexion ?
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
Med Bouchenafa [MVP]
C'est le comportement normal de SQL/Server Contrairement à ce que l'on aurait pu penser logiquement, une erreur dans une transaction n'annule jamais la transaction sauf si l'option XACT_ABORT est activée. J'ai remarqué dernièrement , à mes dépens d'ailleurs, que dans le cas d'une erreur fatale, même cette option n'y pouvait rien. Je n'ai pas testé avec une erreur timeout qui n'est pas une erreur SQL/Server mais une erreur coté client. C'est le client qui décide d'annuler. C'est donc ce client qui devrait prendre la précaution de tester s'il y a une transaction en cours et l'annuler IF @@TRANCOUNT ROLLBACK TRAN
La gestion des erreurs est vraiment le maillon faible de T-SQL Il y a un article intéressant ici : http://www.algonet.se/~sommar/error-handling-I.html C'est vraiment le meilleur article sur la gestion des erreurs T-SQL Si quelqu'un avait le temps de le traduire, on pourrait le mettre sur le site frenchSQL je suis certain qu'il rendra service à beaucoup
-- Salutations Med Bouchenafa TETRASET 75015 Paris
"TAGG INFO NEWS" a écrit dans le message de news: bjq89s$v5f$
Salut,
je suis sous SQL Server 2000, VC++ et AD0 2.7
j'ai une procédure stockée qui réalise des opérations dans une transaction. L'exécution de cette transaction peut parfois être longue et est parfois interrompue par une expiration du délai par ADO. J'ai remarqué que contrairement à ce qu'il se passe losqu'il y a une erreur SQL, la transaction n'est pas annulée et à prioiri reste active. Donc toutes les actions qui suivent dans le cadre de la même connexion ADO sont, à tors, intégrées à la transaction en cours.
Cela me pose un problème. Est ce que quelqu'un a déjà remarqué se comportement? Y a t'il un moyen pour qu'une expiration du délais ADO annule toute transaction SQL active liée à cette connexion ?
Merci
Thierry
C'est le comportement normal de SQL/Server
Contrairement à ce que l'on aurait pu penser logiquement, une erreur dans une transaction n'annule
jamais la transaction sauf si l'option XACT_ABORT est activée. J'ai remarqué dernièrement , à mes
dépens d'ailleurs, que dans le cas d'une erreur fatale, même cette option n'y pouvait rien.
Je n'ai pas testé avec une erreur timeout qui n'est pas une erreur SQL/Server mais une erreur coté
client.
C'est le client qui décide d'annuler. C'est donc ce client qui devrait prendre la précaution de
tester s'il y a une transaction en cours et l'annuler
IF @@TRANCOUNT
ROLLBACK TRAN
La gestion des erreurs est vraiment le maillon faible de T-SQL
Il y a un article intéressant ici : http://www.algonet.se/~sommar/error-handling-I.html
C'est vraiment le meilleur article sur la gestion des erreurs T-SQL
Si quelqu'un avait le temps de le traduire, on pourrait le mettre sur le site frenchSQL
je suis certain qu'il rendra service à beaucoup
--
Salutations
Med Bouchenafa
TETRASET
75015 Paris
"TAGG INFO NEWS" <tagg.research@tagginfo.com> a écrit dans le message de news:
bjq89s$v5f$1@s1.read.news.oleane.net...
Salut,
je suis sous SQL Server 2000, VC++ et AD0 2.7
j'ai une procédure stockée qui réalise des opérations dans une transaction.
L'exécution de cette transaction peut parfois être longue et est parfois
interrompue par une expiration du délai par ADO. J'ai remarqué que
contrairement à ce qu'il se passe losqu'il y a une erreur SQL, la
transaction n'est pas annulée et à prioiri reste active. Donc toutes les
actions qui suivent dans le cadre de la même connexion ADO sont, à tors,
intégrées à la transaction en cours.
Cela me pose un problème. Est ce que quelqu'un a déjà remarqué se
comportement? Y a t'il un moyen pour qu'une expiration du délais ADO annule
toute transaction SQL active liée à cette connexion ?
C'est le comportement normal de SQL/Server Contrairement à ce que l'on aurait pu penser logiquement, une erreur dans une transaction n'annule jamais la transaction sauf si l'option XACT_ABORT est activée. J'ai remarqué dernièrement , à mes dépens d'ailleurs, que dans le cas d'une erreur fatale, même cette option n'y pouvait rien. Je n'ai pas testé avec une erreur timeout qui n'est pas une erreur SQL/Server mais une erreur coté client. C'est le client qui décide d'annuler. C'est donc ce client qui devrait prendre la précaution de tester s'il y a une transaction en cours et l'annuler IF @@TRANCOUNT ROLLBACK TRAN
La gestion des erreurs est vraiment le maillon faible de T-SQL Il y a un article intéressant ici : http://www.algonet.se/~sommar/error-handling-I.html C'est vraiment le meilleur article sur la gestion des erreurs T-SQL Si quelqu'un avait le temps de le traduire, on pourrait le mettre sur le site frenchSQL je suis certain qu'il rendra service à beaucoup
-- Salutations Med Bouchenafa TETRASET 75015 Paris
"TAGG INFO NEWS" a écrit dans le message de news: bjq89s$v5f$
Salut,
je suis sous SQL Server 2000, VC++ et AD0 2.7
j'ai une procédure stockée qui réalise des opérations dans une transaction. L'exécution de cette transaction peut parfois être longue et est parfois interrompue par une expiration du délai par ADO. J'ai remarqué que contrairement à ce qu'il se passe losqu'il y a une erreur SQL, la transaction n'est pas annulée et à prioiri reste active. Donc toutes les actions qui suivent dans le cadre de la même connexion ADO sont, à tors, intégrées à la transaction en cours.
Cela me pose un problème. Est ce que quelqu'un a déjà remarqué se comportement? Y a t'il un moyen pour qu'une expiration du délais ADO annule toute transaction SQL active liée à cette connexion ?