在SQL Server中,是否可以对表进行显式共享锁定?
我需要执行以下操作:
- 对表进行共享锁定
- 将表复制到临时表中进行操作
- 对表进行排他锁定
- 将临时表中的内容复制到表中
- 释放所有锁定
基本上,我想确保在我对临时表进行操作时没有任何东西添加到表中,但我仍然希望能够读取它。
由于某些原因,将整个过程放入事务会导致一些我对临时表所做的操作死锁,因此这不是一个选项。
在SQL Server中,是否可以对表进行显式共享锁定?
我需要执行以下操作:
基本上,我想确保在我对临时表进行操作时没有任何东西添加到表中,但我仍然希望能够读取它。
由于某些原因,将整个过程放入事务会导致一些我对临时表所做的操作死锁,因此这不是一个选项。
/* Create temp table here */
BEGIN TRANSACTION
INSERT INTO #Table (/* Columns */)
SELECT /* Columns */ FROM SourceTable WITH (UPDLOCK,HOLDLOCK)
/* Work within temp table here */
UPDATE st
SET
/* Set new column values based on temp table */
FROM
SourceTable st
inner join
#Table t
on
/* Key column join here */
COMMIT
您需要指定更新锁而不是共享锁,更新锁的作用是“现在是共享锁,但我打算在同一事务中稍后变为独占锁”,以防止可能的死锁。