【问题标题】:SQL Server: lock table during entire stored procedure [duplicate]SQL Server:在整个存储过程中锁定表[重复]
【发布时间】:2017-11-21 11:03:32
【问题描述】:

我有一个流式摄取到我的暂存表中。我每 5 分钟执行一次存储过程,将这个临时表中的所有数据插入/更新到我的 final 表中。

存储过程的过程:

BEGIN
 - UPDATE RECORDS IN FINAL TABLE FROM STAGING TABLE
 - INSERT RECORDS IN FINAL TABLE FROM STAGING TABLE
 - TRUNCATE STAGING TABLE
HERE I WANT TO RELEASE THE LOCK
END

知道如何明确地说我想锁定临时表以进行插入,直到我截断它?

【问题讨论】:

    标签: sql-server stored-procedures table-lock


    【解决方案1】:

    您可以像这样在交易块中执行这些脚本;

    BEGIN
     BEGIN TRANSACTION
     - UPDATE RECORDS IN FINAL TABLE FROM STAGING TABLE
     - INSERT RECORDS IN FINAL TABLE FROM STAGING TABLE
     - TRUNCATE STAGING TABLE
     COMMIT TRANSACTION
    HERE I WANT TO RELEASE THE LOCK
    END
    

    另一笔交易将等待完成您的交易区块。你应该创建 try/catch 块来处理错误。如果脚本出现错误,您应该在 catch 块中 ROLLBACK TRANSACTION。因为如果一个事务正在启动,它必须以 COMMITROLLBACK 的形式完成。您不希望该事务被挂起。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-12
      • 2017-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-14
      • 2011-04-09
      • 1970-01-01
      相关资源
      最近更新 更多