Мне интересно, какое правильное решение приведено ниже:
У меня есть оператор UPDATE
в T-SQL, который нужно запускать как ежедневную задачу.Процедура обновит один битовый столбец в одной таблице.Число затронутых строк составляет около 30 000.
Псевдо-версия T-SQL
UPDATE TABLE_NAME
SET BIT_FIELD = [dbo].[FUNCTION](TABLE_NAME.ID)
WHERE -- THIS ISN'T RELEVANT
Функция, которая определяет истину или ложь, в основном выполняет несколько проверок и обращается к 3 другим таблицам.В настоящее время процедура занимает около 30 минут для запуска и обновления 30 000 строк в нашей среде разработки.Я ожидал, что это удвоится на производстве.
Проблема, с которой я сталкиваюсь, заключается в том, что периодически TABLE_NAME
таблица блокируется.Если я запускаю его партиями по 1000, это кажется нормальным, но если я увеличиваю это, то, кажется, работает нормально, но в итоге таблица блокируется.Единственное решение - отменить запрос, в результате которого не будет обновлено ни одной строки.
Обратите внимание, что процедура не заключена в транзакцию.
Если я запускаю каждое обновление в отдельном UPDATE
заявление это исправит?Что было бы хорошим решением при обновлении довольно большого количества записей в живом окружении?
Любая помощь будет высоко ценится.
Спасибо!