【问题标题】: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。因为如果一个事务正在启动,它必须以 COMMIT 或 ROLLBACK 的形式完成。您不希望该事务被挂起。