Je suis un peu confus sur ce qui se passe dans ce code:
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
DECLARE @RC int
DECLARE @code_article varchar(20)
DECLARE @designation varchar(50)
DECLARE @id bigint
DECLARE @message varchar(80)
 
-- Définir les valeurs de paramètre
set @code_article = 'codearticle 1 test creer article'
set @designation = 'designation 1 test creer article'
 
print 'waat '+convert (varchar, @@trancount)
BEGIN TRANSACTION
print 'weet '+convert (varchar, @@trancount)
select TOP 1 @code_article=code_article from article
print 'wiit '+convert (varchar, @@trancount)
EXEC @RC = [Sprout].[dbo].[creer_article] @code_article, @designation, @id OUTPUT , @message OUTPUT 
print 'woot '+convert (varchar, @@trancount)
ROLLBACK TRANSACTION
print 'wuut '+convert (varchar, @@trancount)
J'obtiens ces messages:
Citation Envoyé par Analyseur de Requêtes
waat 0
weet 1
wiit 1
Serveur : Msg 266, Niveau 16, État 2, Procédure creer_article, Ligne 24
Le compte des transactions après EXECUTE indique qu'il manque une instruction COMMIT ou ROLLBACK TRANSACTION. Compte précédent = 1, compte en cours = 0.
woot 0
Serveur : Msg 3903, Niveau 16, État 1, Ligne 18
La requête ROLLBACK TRANSACTION n'a pas de BEGIN TRANSACTION correspondante.
wuut 0
La procédure stockée ouvre une transaction pour vérifier que le code_article n'existe pas encore. Dans mon cas, j'ai fait exprès de sélectionner un code_article qui existe, voir comment elle se comporte. Dans ces cas-là, je fais un rollback. J'ai regardé à l'intérieur, mais il n'y a pas de rollback en trop.
Alors, y-a-t'il quelque chose que je n'ai pas vu?
Un truc que je n'ai pas compris à propos des transactions immbriquées?
Est-ce que Joanna choisira Christophe ou Marc?


Contexte:
Je suis en train d'écrire un script de test pour cette procédure stockée, et pour pouvoir tranquilement tabasser la base de données sans effets secondaires, je voulais encadrer le tout dans un espèce de grande transaction que je 'rollbacke' à la fin. Hop, ni vu ni connu, j'ai fait mes tests et personne a rien vu.