Comment verrouiller la transaction jusqu'à ce qu'une seule requête termine son exécution pour ne pas avoir d'erreur de blocage

J'ai le code suivant dans lequel j'ai un doute.

Update Statement on Table 1 Update Statement on Table 2 Select Statement which include both the Table 1 

Maintenant au-dessus du code returnnera à l'application. signifie qu'il obtient toutes les fonctions pour l'application.

Je reçois fréquemment une erreur de blocage dans l'application.

J'ai des centaines d'users qui vont chercher la même table à la fois. Donc je dois m'assurer que jusqu'à la fin de l'instruction select update update ne se triggersra pas OU comment verrouiller l'instruction update.

Un doute de plus que si je suppose que je suis en train de mettre à jour la ligne et un autre user a essayé de sélectionner cette table, puis il va get l'impasse. (L'user essayait de sélectionner une autre ligne qui n'était pas dans l'instruction de mise à jour.) Que se passera-t-il pour ce scénario.

Aidez-moi, s'il vous plaît.

Merci d'avance

Vous devriez utiliser la transaction,

  BEGIN TRANSACTION [Tran1] BEGIN TRY Update Statement on Table 1 Update Statement on Table 2 Select Statement which include both the Table 1 COMMIT TRANSACTION [Tran1] END TRY BEGIN CATCH ROLLBACK TRANSACTION [Tran1] END CATCH GO 

Si vous voulez que personne ne mette à jour / supprime la ligne, j'irais avec UPDLOCK sur l'instruction SELECT. Ceci est une indication que vous allez mettre à jour la même ligne rapidement, par exemple

 select @Bar = Bar from oFoo WITH (UPDLOCK) where Foo = @Foo;