Bonjour,

J'ai un certain problème, depuis un petit moment, dont je ne trouve pas la solution :

J'ai plusieurs ordinateurs qui doivent effectuer un traitement différent.
Le problème vient du fait que, parfois, le même traitement est effectué par deux (ou plus) ordinateurs différents.
Je pensais que le simple fait de mettre un BEGIN TRANSACTION, au début de ma procédure stockée, me permettrait de bloquer l'accès à la table où je vais chercher le traitement à effectuer mais visiblement non...

Voici le code de ma procédure stocké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
 
CREATE PROCEDURE dbo.GetTraitementToDo
@IdOrdinateur INT
AS
	DECLARE @IdTraitement INT
 
	BEGIN TRANSACTION
 
	SET @IdTraitement = (SELECT TOP 1 IdTraitement FROM Traitements WHERE State = 0 ORDER BY IdTraitement ASC)
 
	UPDATE Traitements SET IdOrdinateur = @IdOrdinateur, State = 1 WHERE IdTraitement = @IdTraitement
 
	SELECT *
	FROM Traitements
	WHERE IdTraitement = @IdTraitement
 
	COMMIT TRANSACTION
GO
Merci.

Bonne journée.

Frédéric.