Как обновить большое количество записей MS SQL

Обновить большое количество записей за раз сложно – это долгий процесс, который может вызвать не желательные блокировки и снижение скорости работы базы данных. Чтобы этого избежать, можно разбить обновление данных, например так: (код подходит для MS SQL 2005 и более старших версий)

DECLARE @RowsUpdated INTEGER
SET @RowsUpdated = 1

WHILE (@RowsDeleted > 0)
BEGIN
UPDATE TOP (1000) TableName SET SomeField = '' WHERE OtherField = SomeValue AND SomeField != ''
SET @RowsUpdated = @@ROWCOUNT
END

Данный код обновляет в цикле по 1000 строк

Если вам нужно удалить строки, то это делается аналогично и описано в этой статье на нашем сайте

@@ROWCOUNT возвращает количество строк затронутых последней операцией, в данном случае обновлением. Как только строки перестанут удаляться, цикл завершится. Это значение нужно сохранять непосредственно после выполнения команды, иначе значение может измениться.

После обновления необходимо выполнить сжатие базы данных для уплотнения и очистки от мусора.

 DBCC SHRINKDATABASE(N'Database')

Так как вследствии уплотнения индексы могут фрагментироваться, то рекомендуется выполнить дефрагментацию индексов. Как это сделать описано в статье о дефрагментации индексов

Внимание! Не выполняйте код бездумно на боевой системе не опробовав его на тесте. Автор статьи не несёт ответственности за последствия.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *