繁体   English   中英

SQL Server-如何在存储过程完成之前锁定表

[英]SQL Server - How to lock a table until a stored procedure finishes

我想做这个:

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)。

我本人需要这个答案,并从David Moye提供链接中做出了决定,并认为它可能对具有相同问题的其他人有用:

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

使用TABLOCKX锁定提示进行交易。 有关锁定的更多信息, 请参见本文

BEGIN TRANSACTION

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

-- You do lots of things here

COMMIT

这将保持“表锁”直到您当前的“交易”结束。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM