Bonjour tout le monde
Lorsque, sous sql server 2008 (pas R2) je fais:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
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 ?