代码之家  ›  专栏  ›  技术社区  ›  Greg

SQL Server-如何锁定表,直到存储过程完成

  •  40
  • Greg  · 技术社区  · 15 年前

    我想这样做:

    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 Reporting Services报表调用过程A,然后只在该过程完成后显示表A。(我无法将程序A更改为返回表A)。

    3 回复  |  直到 7 年前
        1
  •  49
  •   Community Mohan Dere    9 年前

    我自己也需要这个答案 link provided by 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
    
        2
  •  15
  •   David Moye    15 年前

    对您的事务使用tablockx锁提示。 See this article 有关锁定的详细信息。

        3
  •  10
  •   Xin    7 年前
    select top 1 *
    from table1
    with (tablock, holdlock)
    

    这将保持“表锁”,直到当前“事务”结束。