Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/12/2011, 11h26   #1
Membre du Club
 
Inscription : octobre 2009
Messages : 59
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 59
Points : 69
Points : 69
Par défaut Problème de transaction

Bonjour tout le monde
Lorsque, sous sql server 2008 (pas R2) je fais:
Code :
1
2
3
4
5
6
7
8
9
10
 
                BEGIN TRY
					BEGIN TRANSACTION q_ar_new_MajESale_fr_Articles
						EXEC [dbo].[q_MajESale_fr_Articles] @ForetagKod, @SprakKod;
					COMMIT TRANSACTION q_ar_new_MajESale_fr_Articles
                END TRY
                BEGIN CATCH
                               ROLLBACK TRANSACTION q_ar_new_MajESale_fr_Articles
                               --Blah blah des tests pour trouver l'erreur
                END CATCH
J'ai le droit à un superbe :
Citation:
Msg*3903, Niveau*16, État*1, Ligne*216
La requête ROLLBACK TRANSACTION n'a pas de BEGIN TRANSACTION correspondante.
Je sais que les erreurs peuvent invalider une transaction en fonction du niveau de gravité, mais est ce qu'elles peuvent carrément la faire disparaître ?
J'ai fait quelques tests avec des SELECT @@TRANCOUNT; et a priori c'est le cas, j'ai placé un select avant le exec, un après et un au début du catch, résultat : 1 avant le exec, 0 dans le catch (???!) et pas de message après le exec (normal)

Du coup je veux bien vérifier qu'il il y a une transaction en cours (IF @@TRANCOUNT > 0) mais qu'en est-il des données traitées dans la procédure seront-elles enregistrées ou non ?
The zxeno prophet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2011, 11h49   #2
Membre Expert
 
Avatar de Kropernic
 
Homme
Analyste / Programmeur
Inscription : juillet 2006
Messages : 1 307
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : Belgique

Informations professionnelles :
Activité : Analyste / Programmeur
Secteur : Distribution

Informations forums :
Inscription : juillet 2006
Messages : 1 307
Points : 1 019
Points : 1 019
J'suis justement en formation et on voit les transactions ^^.

Tu mets ton bloc transaction dans ton bloc try. C'est l'inverse, mets ton bloc try dans ton bloc transaction.
Kropernic est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/12/2011, 23h13   #3
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 959
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 959
Points : 17 791
Points : 17 791
Non, sa solution est bonne.
mais
1) la proc [dbo].[q_MajESale_fr_Articles] peut elle même faire une transactions. Vois comment sont gérées les transactions imbriquées dans l'article que j'ai écrit : http://sqlpro.developpez.com/cours/s...ns-imbriquees/
2) dans le CATCH, utilisez la fonction XACT_STATE pour tester l'état de validité transactionnel.

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 * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2011, 08h42   #4
Membre Expert
 
Avatar de Kropernic
 
Homme
Analyste / Programmeur
Inscription : juillet 2006
Messages : 1 307
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : Belgique

Informations professionnelles :
Activité : Analyste / Programmeur
Secteur : Distribution

Informations forums :
Inscription : juillet 2006
Messages : 1 307
Points : 1 019
Points : 1 019
Au temps pour moi alors.

Pourtant, j'aurais cru que vu que sa transaction est déclaré au sein du bloc try, elle ne serait visible qu'à l'intérieur de ce bloc.

La visibilité des objets ne fonctionne pas de cette façon en sql server ? J'avoue avoir extrapolé cela à partir de mes connaissances en programmation.
Kropernic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2011, 15h09   #5
Membre chevronné
 
Inscription : juillet 2006
Messages : 1 194
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 1 194
Points : 751
Points : 751
"SET XACT_ABORT ON" peut aider.
Sergejack est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2011, 17h47   #6
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 959
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 959
Points : 17 791
Points : 17 791
Citation:
Envoyé par griftou Voir le message
Pourtant, j'aurais cru que vu que sa transaction est déclaré au sein du bloc try, elle ne serait visible qu'à l'intérieur de ce bloc.

La visibilité des objets ne fonctionne pas de cette façon en sql server ? J'avoue avoir extrapolé cela à partir de mes connaissances en programmation.
Le fonctionnement d'un SGBDR n'a rien en commun avec le codage d'un langage L4G... Les transactions sont des objets de niveau cession et sont donc persistant entre procédures requêtes ad-hoc et tutti quanti !

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 * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2011, 18h13   #7
Membre Expert
 
Avatar de Kropernic
 
Homme
Analyste / Programmeur
Inscription : juillet 2006
Messages : 1 307
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : Belgique

Informations professionnelles :
Activité : Analyste / Programmeur
Secteur : Distribution

Informations forums :
Inscription : juillet 2006
Messages : 1 307
Points : 1 019
Points : 1 019
Merci pour ces éclaircissements.
Kropernic est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h08.


 
 
 
 
Partenaires

Hébergement Web