Существует процесс, который выполняется каждый час, который нужно вставить в таблицу1, но когда выполняется приведенный ниже запрос, вставки блокируются.Кто-нибудь может объяснить почему?Я понимаю, что подсказки блокировки - это просто подсказки, и SQL может предпочесть их игнорировать.Таблица1 имеет 300 метров строк, и мне нужно обновить значения в ColumnA.Я делаю это по частям, чтобы помочь с откатом в случае, если процесс должен быть остановлен, следовательно, цикл while.
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
go
declare @start bigint
declare @end bigint
declare @max bigint
declare @step int
set @step = 50000
set @start = 17953095
set @end = @start + @step
set @max = @start + 2000000
while ( @end < @max )
begin
waitfor delay '00:00:10'
begin transaction
update [table1] with (ROWLOCK)
set [table1].[ColumnA] = [table2].[ColumnA]
from [table2] (nolock)
where [table2].[ColumnB] = [table1].[ColumnB]
and [table1].ID >= @start
and [table1].ID < @end
commit transaction
print @end
if @end >= @max
begin
break
end
set @start = @end
set @end = @end + @step
end
print @end
Можно ли сделать это по-другому, чтобы он не блокировал вставки илидругие обновления?Больше ничего не нужно будет работать с ColumnA, кроме моего запроса выше.