Вы можете проверить переменную @@TRANCOUNT
- если она> 0, то у вас есть внешняя транзакция, и, следовательно, - все ваши обновления будут зафиксированы или откатлены одновременно.(Если вы не выбрали фиксацию внешней транзакции - это не рекомендуется).
Если = 0 - тогда каждый из UPDATE вашего цикла выполняется в своей собственной неявной транзакции, поэтому - не нужно беспокоиться, тогда
Попробуйте использовать это:
declare @rc int, @err int
WHILE 1=1
BEGIN
UPDATE TOP (@UpdateBlockSize) table1
SET field1 = nv.value
FROM table1 i
INNER JOIN #table2 nv ON nv.id = i.id
SELECT @rc = @@ROWCOUNT, @err = @@ERROR
IF @rc < @UpdateBlockSize OR @err <> 0 BREAK
END