Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Чистка базы  [new]
Meriguan
Member

Откуда:
Сообщений: 124
Добрый день!

Есть некая база, в ней надо почистить данные в 20-ти таблицах, одна таблица родительнская, все остальные дочерние, таблицы связаны по внешнему ключу.
Для чисты базы применяеться следующий алгоритм.
Выбор всех таблиц которые связанные с родительнской, затем формирование скриптов для удаления данных и собственно удаление данных динамическим SQL(exec (ScriptDelete)).
В данном случае используется курсор по сценариям удаления и затем цикл удаления по top N строк.

Если какой либо алгоримт, который не использовал бы курсоров и без динамического SQL?
1 авг 12, 14:43    [12946668]     Ответить | Цитировать Сообщить модератору
 Re: Чистка базы  [new]
Glory
Member

Откуда:
Сообщений: 104760
Meriguan
Если какой либо алгоримт, который не использовал бы курсоров и без динамического SQL?

Прописать порядок удаления из 20ти таблиц явно.
1 авг 12, 14:45    [12946680]     Ответить | Цитировать Сообщить модератору
 Re: Чистка базы  [new]
Meriguan
Member

Откуда:
Сообщений: 124
Glory
Meriguan
Если какой либо алгоримт, который не использовал бы курсоров и без динамического SQL?

Прописать порядок удаления из 20ти таблиц явно.


Мне эта идя сразу пришла на ум, но есть одна проблема.
Если в базе появяться еще таблицы, то надо добавлять еще блоки удаления в процедуре, иначе процедура упадет. Отслеживать все изменения которые делают в базе я не смогу, т.к. их много и меня во все действия не посвящают.
1 авг 12, 14:50    [12946719]     Ответить | Цитировать Сообщить модератору
 Re: Чистка базы  [new]
Glory
Member

Откуда:
Сообщений: 104760
Meriguan
Отслеживать все изменения которые делают в базе я не смогу, т.к. их много и меня во все действия не посвящают.

Как вы тогда себе представляете "алгоримт, который не использовал бы курсоров и без динамического SQL" на базе с неизвестным числом таблиц ?
1 авг 12, 14:52    [12946732]     Ответить | Цитировать Сообщить модератору
 Re: Чистка базы  [new]
Meriguan
Member

Откуда:
Сообщений: 124
Glory
Meriguan
Отслеживать все изменения которые делают в базе я не смогу, т.к. их много и меня во все действия не посвящают.

Как вы тогда себе представляете "алгоримт, который не использовал бы курсоров и без динамического SQL" на базе с неизвестным числом таблиц ?


Как вариант перед чистой базы изменять внешние ключи в Delete Rule - Cascade, удалять данные только из родительской таблицы, затем обрано менять внешние ключи Delete Rule - No Action.
1 авг 12, 15:00    [12946796]     Ответить | Цитировать Сообщить модератору
 Re: Чистка базы  [new]
Glory
Member

Откуда:
Сообщений: 104760
Meriguan
Как вариант перед чистой базы изменять внешние ключи в Delete Rule - Cascade, удалять данные только из родительской таблицы, затем обрано менять внешние ключи Delete Rule - No Action.

И все это без перебора _неизвестного_ числа fk constraint-ов ?
1 авг 12, 17:59    [12948259]     Ответить | Цитировать Сообщить модератору
 Re: Чистка базы  [new]
Meriguan
Member

Откуда:
Сообщений: 124
Glory
Meriguan
Как вариант перед чистой базы изменять внешние ключи в Delete Rule - Cascade, удалять данные только из родительской таблицы, затем обрано менять внешние ключи Delete Rule - No Action.

И все это без перебора _неизвестного_ числа fk constraint-ов ?


Так же с переборами и динамически, но это выполняется очень быстро.
1 авг 12, 18:44    [12948544]     Ответить | Цитировать Сообщить модератору
 Re: Чистка базы  [new]
Meriguan
Member

Откуда:
Сообщений: 124
Glory,
Еще есть идея с отключением внешних ключей перед удалением данных по тому же самому алгоритму. Срокость должна увеличится, пока только не известно не сколько.
1 авг 12, 18:47    [12948557]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить