Массовое удаление сервера Sql по известным идентификаторам записей - PullRequest
1 голос
/ 02 октября 2010

Мне нужно удалить много строк из базы данных sql server 2008, она должна быть масштабируемой, поэтому я думал о массовом удалении, проблема в том, что здесь не так много ссылок, по крайней мере, в моем случае.

Первый фактор заключается в том, что я точно знаю идентификатор каждой строки, которую нужно удалить, поэтому любые подсказки с TOP не подходят, также я буду удалять меньше строк, которые я хочу сохранить, поэтому некоторые из них не понадобятся методы "drop / temp table / re-create".

Таким образом, я подумывал использовать WHERE IN, либо добавляя идентификаторы, либо XML-данные с идентификаторами, также есть возможность использовать MERGE для удаления строк.

Если мне придется удалить более 1000 строк, отправка всех идентификаторов в WHERE IN может быть проблемой? А что с MERGE - это действительно лекарство от всех проблем массовой вставки / обновления / удаления? Что выбрать?

1 Ответ

2 голосов
/ 02 октября 2010

Одним из вариантов будет сохранение известных идентификаторов в таблице «контроллера», а затем удаление строк из вашей основной таблицы данных, у которых их идентификаторы отображаются в таблице контроллеров.

Таким образом, вы можетелегко «пакетировать» ваши удаления, например,

DELETE FROM dbo.YourMainDataTable
WHERE ID IN (SELECT TOP (250) ID FROM dbo.DeleteControllerTable)

Вы можете легко запустить этот оператор удаления, например, в задании агента SQL, которое появляется каждые 15 минут, чтобы проверить, есть ли что-либо для удаления.Тем временем вы могли бы добавить больше идентификаторов в вашу таблицу DeleteController, таким образом, вы могли бы «отделить» процесс ввода идентификаторов, которые будут удалены от фактического процесса удаления.

...