[SQL][Transaction]Transactions imbriquées, scripts de test and rock and roll
Je suis un peu confus sur ce qui se passe dans ce code:
Code:
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:love2: 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:bug: 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.