Bonjour à tous,
je développe une application Silverlight 3 exploitant RIA Services pour l'accès aux données dans une base SQL Server 2005.
Dans cette application, je dispose d'un écran principal doté d'un bouton, lors du clic sur ce bouton je dois générer un incrément unique (un entier); ce dernier est en fait un champ d'une table en BDD qui est incrémenté puis renvoyé via une procédure stockée du type :
Mon problème est que lorsque deux utilisateurs cliquent sur le bouton "relativement" en même temps... ils ont le même n° d'incrément !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 UPDATE MaTable SET MonIncrement=MonIncrement+1 SELECT MonIncrement FROM MaTable
Qu'à cela ne tienne, j'ai :
- encapsulé les deux opérations au sein d'une transaction (aucun effet)
- apposé des verrous exclusifs (with (tablockx)) sur les 2 opérations (update et select) : j'ai toujours le même incrément pour les différentes exécutions, mais incrémenté de 2 et non plus de 1
- spécifié un niveau d'isolation serializable à la transaction... rien n'y fait !
J'y perds un peu mon latin et doit avouer que là je commence à être à court de solution... à moins de passer par un auto-incrément en base directement mais ce n'est pas le process demandé. Des idées ?
Partager