web-dev-qa-db-fra.com

SQL Server - Comment verrouiller une table jusqu'à la fin d'une procédure stockée

Je veux faire ça:

create procedure A as
  lock table a
  -- do some stuff unrelated to a to prepare to update a
  -- update a
  unlock table a
  return table b

Est-ce que quelque chose comme ça est possible?

En fin de compte, je souhaite que mon rapport SQL Server Reporting Services appelle la procédure A, puis affiche uniquement le tableau A une fois la procédure terminée. (Je ne suis pas en mesure de modifier la procédure A pour renvoyer le tableau a).

41
Greg

J'avais besoin de cette réponse moi-même et du lien fourni par David Moye , j'ai décidé à ce sujet et j'ai pensé qu'elle pourrait être utile à d'autres personnes ayant la même question:

CREATE PROCEDURE ...
AS
BEGIN
  BEGIN TRANSACTION

  -- lock table "a" till end of transaction
  SELECT ...
  FROM a
  WITH (TABLOCK, HOLDLOCK)
  WHERE ...

  -- do some other stuff (including inserting/updating table "a")



  -- release lock
  COMMIT TRANSACTION
END
50
Graham

Utilisez l'indice de verrouillage TABLOCKX pour votre transaction. Voir cet article pour plus d'informations sur le verrouillage.

15
David Moye
BEGIN TRANSACTION

select top 1 *
from table1
with (tablock, holdlock)

-- You do lots of things here

COMMIT

Cela maintiendra le "verrou de table" jusqu'à la fin de votre "transaction" actuelle.

13
Xin