Единственный способ удержать блокировку таблицы - оставить транзакцию открытой.Поэтому нам может понадобиться больше информации об этой «тупиковой ситуации в некоторых вещах, которые я делаю с временной таблицей».
В зависимости от задачи временная таблица может вообще не понадобиться - похоже, выПостроение чего-либо из процедурного мышления, а не основанного на множестве.
Базовым эскизом того, что вы обрисовали в общих чертах, будет:
/* 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
Вам нужно указать блокировку UPDATE, а неразделяемая блокировка, которая фактически является «разделяемой блокировкой сейчас, но я собираюсь перейти к исключительной позже в рамках той же транзакции», чтобы предотвратить возможную тупиковую ситуацию.