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).
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
Utilisez l'indice de verrouillage TABLOCKX pour votre transaction. Voir cet article pour plus d'informations sur le verrouillage.
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.