SQL Server – Come bloccare una tabella fino al termine di una stored procedure

Voglio farlo:

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 

È ansible qualcosa del genere?

In definitiva, desidero che i miei servizi di report del server SQL segnalino la procedura A, quindi visualizziamo solo la tabella a al termine della procedura. (Non sono in grado di modificare la procedura A per tornare alla tabella a).

Ho avuto bisogno di questa risposta da solo e dal link fornito da David Moye , ho deciso su questo e ho pensato che potesse essere utile ad altri con la stessa domanda:

 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 

Utilizza il suggerimento di blocco TABLOCKX per la tua transazione. Vedi questo articolo per ulteriori informazioni sul blocco.

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

Ciò manterrà il “blocco tabella” fino alla fine della transaction corrente.