У меня есть очень большой стол, поэтому я использую следующий для удаления старых записей:SQL Server удалить с помощью цикла WHILE не работает
WHILE (@@ROWCOUNT > 0)
BEGIN
DELETE TOP (5000) FROM myTable
WHERE date < 20130103
END
Я запускаю это несколько раз, используя разные даты. Иногда он работает нормально (занимает около 20 минут), но в других случаях запрос заканчивается немедленно, и ничего не удаляется. Когда это произойдет, я просто сделаю простой оператор SELECT из этой таблицы, а затем снова попытаюсь выполнить вышеуказанный оператор WHILE, а затем он будет работать! Кто-нибудь знает, почему это? Мне нужно автоматизировать этот запрос для регулярной работы, чтобы контролировать размер таблицы, но я хочу убедиться, что он действительно удалит правильно, когда он запускается. Спасибо.
Не следует дата записывается как ' '2013-01-03'', а не как число? –
Смешно, что каждый ответ полностью пропустил это. –
Также обратите внимание, что просто наличие цикла не обязательно уменьшает влияние на журнал или параллелизм в зависимости от того, является ли это одной транзакцией.Я бы прекратил использовать @@ ROWCOUNT для управления, добавлял транзакции внутри цикла и задавал переменную = @@ ROWCOUNT. См. Http://www.sqlperformance.com/2013/03/io-subsystem/chunk-deletes –