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

je veux faire ceci:

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 veux que mon rapport SQL server reporting services appelle la procédure A, et n'affiche la table a qu'une fois la procédure terminée. (Je ne peux pas changer la procédure A pour retourner le tableau a).

36
demandé sur Greg 2010-09-08 01:06:24

3 réponses

Besoin de cette réponse moi-même et de l' , a décidé cela et a pensé qu'il pourrait être utile à d'autres avec 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
43
répondu Graham 2017-05-23 11:47:09

utilisez L'indicateur de verrouillage TABLOCKX pour votre transaction. Voir cet article pour plus d'informations sur le verrouillage.

15
répondu David Moye 2010-09-07 21:13:00
select top 1 *
from table1
with (tablock, holdlock)

ceci maintiendra le 'verrouillage de table' jusqu'à la fin de votretransaction.

9
répondu Xin 2017-05-05 06:56:51