Bonjour,
un de mes dév à coder un truc un peu bizarre !

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
 
BEGIN
        BEGIN TRANSACTION
        SELECT @w = isnull(INFO_LINK2, 0)
        FROM   toto (ROWLOCK)
        WHERE  ID = @id
        IF @w = 0
        BEGIN
                UPDATE toto
                SET    INFO = 50
                WHERE  ID = @id
                COMMIT TRANSACTION
                SELECT @ostatus = 0
        END
        ELSE
        BEGIN
                ROLLBACK TRANSACTION
                SELECT @oStatus = 2
        END      
END
La modification que j'ai en tête :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
BEGIN        
  -- BEGIN TRANSACTION
  UPDATE toto
     SET INFO = 50
   WHERE  ID = @id
     AND isnull(INFO, 0) = 0
  SET @r= @@ROWCOUNT
  -- COMMIT TRANSACTION
 IF @R>0
   SELECT @ostatus = 0
 ELSE
   SELECT @oStatus = 2
END
Mes questions sont les suivantes :
Mon code peut-il remplacer le code T-Sql que mon chère dév à écrit ?
Y a t-il correspondance entre les 2 codes en terme transactionnel ?
Pourquoi verrouiller un enregistrement puis le mettre à jour (cas du 1 code) alors qu'un simple update peut suffire ?

Merci