【发布时间】:2020-04-26 08:47:53
【问题描述】:
我遇到了一个看似简单但找不到解决方案的问题。我有一个长时间运行的存储过程,它将在语句的开头和结尾更新一个表。问题是,表在整个过程中都被锁定了。这是一个简化的版本:
ALTER PROCEDURE [dbo].[Proc_FullRefresh]
AS
BEGIN
UPDATE Settings SET SettingValue = 'true' WHERE SettingName = 'Running'
WAITFOR DELAY '00:00:30'
END
问题是,在整个过程运行时,我无法从Settings 表中选择该行。我什至尝试包装交易以查看是否有帮助:
BEGIN TRAN
UPDATE Settings SET SettingValue = 'true' WHERE SettingName = 'Running'
COMMIT;
BEGIN TRAN
WAITFOR DELAY '00:00:30'
COMMIT
但这也没有用。有什么方法可以在过程执行其他操作时释放Settings 表上的锁?
【问题讨论】:
-
另外 - 即使您在事务中运行更新,极不可能整个表都会被锁定; SQL Server 使用 基于行的 锁 - 因此您正在更新的行可能被锁定 - 但不是整个表 ....
标签: sql-server tsql sql-server-2012 locking