Bonjour à tous,

Voilà j'ai un léger problème, je débute avec les transactions et malgré mes recherches je n'arrive pas à comprendre l'erreur, ci-dessous ma procédure suivie de l'erreur renvoyée :
Code : 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
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
CREATE PROCEDURE SupprEd(@titre varchar(64), @complément varchar(128), @V_SORTIE INT =1 OUTPUT)
as
declare @t_original varchar(64), @annee varchar(4), @stock int, @cpted int, @bool int
declare CurEd cursor for(
  select TITRE_ORIGINAL, DATE_DE_SORTIE
  from EDITION
  where TITRE = @titre and COMPLEMENT_DE_TITRE = @complément)
 
open CurEd
fetch next from CurEd
into @t_original, @annee
-- On teste si l'édition existe, si ce n'est pas le cas, on affiche un message d'erreur
   if(@@FETCH_STATUS != 0) print 'Aucune édition de ce type.'
-- Tant que le curseur CURED pointe sur un élément, on effectur les opérations suivantes
   begin tran
   while @@FETCH_STATUS = 0
      begin
      -- S'il une réservation a été faite sur l'édition, on affiche un message d'erreur
      if(exists(select * from RESERVATION R where R.TITRE = @titre and R.COMPLEMENT_DE_TITRE = @complément))
         begin
         print 'Une réservation est prévue sur cette édition...'
         set @V_SORTIE = 0
         end
      -- Sinon on supprime l'édition et les stocks correspondants
      else
         begin
         declare CurStockAux cursor for(
            select #STOCK
               from STOCK
               where TITRE = @titre and COMPLEMENT_DE_TITRE = @complément)
         open CurStockAux
         fetch next from CurStockAux
         into @stock
         set @cpted = 0
         while @@FETCH_STATUS = 0
            begin
            -- La procédure SupprStock renvoie 1 si elle s'est déroulée correctement, 0 sinon
	    EXECUTE SupprStock @stock, @V_SORTIE = @bool OUTPUT
            -- Si la suppression d'un élément du stock ne s'est pas effectuée correctement (location en cours),
            -- on annule la transaction.
	    if(@bool = 0)
               rollback tran
            set @cpted = @cpted + 1
	    fetch next from CurStockAux
            into @stock
            end
         close CurStockAux
         deallocate CurStockAux
         delete EDITION where TITRE = @titre and COMPLEMENT_DE_TITRE = @complément
         end
      print 'L''édition ' + @titre + ' : ' + @complément + ' et les stocks correspondants (' + CAST(@cpted as varchar) + ') ont été supprimés de la base.'
      fetch next from CurEd
      into @t_original, @annee
      end
   commit tran
   close CurEd
   deallocate CurEd;
Serveur : Msg 3902, Niveau 16, État 1, Procédure SupprEd, Ligne 56
La requête COMMIT TRANSACTION n'a pas de BEGIN TRANSACTION correspondante.
La procédure SupprStock supprime un élément du stock, sachant qu'une édition peut avoir 0 ou n stock(s) correspondant(s). Ici je souhaite utiliser un transaction car si une location est en cours sur un élément du stock correspondant à l'édition que je désire supprimer, il faudrait annuler toutes les éventuelles suppressions qui pourraient avoir été faites au préallable.

J'espère avoir été assez clair, en vous remerciant d'avance.

Cordialement.