SQL Server - Как заблокировать таблицу до завершения хранимой процедуры
Я хочу сделать это:
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
Возможно ли что-то подобное?
В конечном итоге я хочу, чтобы мой отчет служб отчетов SQL Server вызывал процедуру A, а затем отображал таблицу a только после завершения процедуры. (Я не могу изменить процедуру A для возврата таблицы a).
3 ответа
Мне понадобился этот ответ, и я по ссылке, предоставленной Дэвидом Мойе, решил это и подумал, что он может быть полезен другим с таким же вопросом:
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
select top 1 *
from table1
with (tablock, holdlock)
Это удержит "блокировку таблицы" до конца вашей текущей "транзакции".
Используйте подсказку блокировки TABLOCKX для вашей транзакции. Смотрите эту статью для получения дополнительной информации о блокировке.