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

Откуда: Санкт-Петербург
Сообщений: 998
Возникла необходимость залить данные из архива в актуальную базу.
Для этого нужно актуальную базу почистить, т.е. удалить все данные из всех таблиц, а потом залить данные из архива в эти таблицы.

1. Сначала нужно быстро удалить всё из таблиц. Есть ли в MSSQL Server 2005 что то наподобе команды truncate [имя таблицы] в Оракле?

2. Как отключить все связи и отношения в таблицах актуальной базы, чтобы можно было без проблем залить в них данные? Ведь если начнёшь заливать таблицы со вкючёнными foregn keys, то начнётся ругань на отсутствие ссылочной целостности.
3 мар 15, 13:28    [17337003]     Ответить | Цитировать Сообщить модератору
 Re: Отключение всех отношений между таблицами базы  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
verter,

1. в Management Studio получить скрипт всей базы данных.
2. DROP DATABASE
3. Выполнить скрипт из п.1, закомментарив сначала строки, создающие CONSTRAINTы (или перенести их в отдельный скрипт).
4. Перенести данные.
5. Выполнить закомментаренные ранее строки с CONSTRAINTами
3 мар 15, 13:32    [17337028]     Ответить | Цитировать Сообщить модератору
 Re: Отключение всех отношений между таблицами базы  [new]
Glory
Member

Откуда:
Сообщений: 104760
verter
Есть ли в MSSQL Server 2005 что то наподобе команды truncate [имя таблицы] в Оракле?

есть, прято так и называется - truncate table

verter
2. Как отключить все связи и отношения в таблицах актуальной базы, чтобы можно было без проблем залить в них данные? Ведь если начнёшь заливать таблицы со вкючёнными foregn keys, то начнётся ругань на отсутствие ссылочной целостности.

Перебрать в цикле все все таблицы и длоя каждой выполнить нужный ALTER TABLE
3 мар 15, 13:33    [17337032]     Ответить | Цитировать Сообщить модератору
 Re: Отключение всех отношений между таблицами базы  [new]
verter
Member

Откуда: Санкт-Петербург
Сообщений: 998
iap,

DROP DATABASE сделать не могу, мне нужно чтобы остались хранимые процедуры и функции, вообще всё кроме данных в таблицах
3 мар 15, 13:50    [17337161]     Ответить | Цитировать Сообщить модератору
 Re: Отключение всех отношений между таблицами базы  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
verter
iap,

DROP DATABASE сделать не могу, мне нужно чтобы остались хранимые процедуры и функции, вообще всё кроме данных в таблицах

тогда
Glory
Перебрать в цикле все все таблицы и длоя каждой выполнить нужный ALTER TABLE
3 мар 15, 13:56    [17337185]     Ответить | Цитировать Сообщить модератору
 Re: Отключение всех отношений между таблицами базы  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
verter,

хотя вы невнимательны..... вам предложили скрипт ВСЕЙ БД со ВСЕМИ обьектами
3 мар 15, 13:56    [17337190]     Ответить | Цитировать Сообщить модератору
 Re: Отключение всех отношений между таблицами базы  [new]
verter
Member

Откуда: Санкт-Петербург
Сообщений: 998
Glory
verter
Есть ли в MSSQL Server 2005 что то наподобе команды truncate [имя таблицы] в Оракле?

есть, прято так и называется - truncate table


Это не эквивалент оракловскому truncate хоть и так же называется. В Оракле данные удаляются безусловно даже если есть какие-нибудь foreign keys, в mssql будет ругань.
3 мар 15, 13:56    [17337193]     Ответить | Цитировать Сообщить модератору
 Re: Отключение всех отношений между таблицами базы  [new]
verter
Member

Откуда: Санкт-Петербург
Сообщений: 998
Maxx
verter,

хотя вы невнимательны..... вам предложили скрипт ВСЕЙ БД со ВСЕМИ обьектами


верно, извиняюсь, теперь понял. Спасибо!
3 мар 15, 13:59    [17337209]     Ответить | Цитировать Сообщить модератору
 Re: Отключение всех отношений между таблицами базы  [new]
Glory
Member

Откуда:
Сообщений: 104760
verter
Это не эквивалент оракловскому truncate хоть и так же называется. В Оракле данные удаляются безусловно даже если есть какие-нибудь foreign keys, в mssql будет ругань.

Если бы все команды mssql были эквивалентны oracle, то mssql назывался бы oracle. Или наоборот
3 мар 15, 14:04    [17337241]     Ответить | Цитировать Сообщить модератору
 Re: Отключение всех отношений между таблицами базы  [new]
Glory
Member

Откуда:
Сообщений: 104760
verter
В Оракле данные удаляются безусловно даже если есть какие-нибудь foreign keys,

Документацию читать не пробовали

"Restrictions on Truncating Tables
This statement is subject to the following restrictions:

You cannot individually truncate a table that is part of a cluster. You must either truncate the cluster, delete all rows from the table, or drop and re-create the table.

You cannot truncate the parent table of an enabled foreign key constraint. You must disable the constraint before truncating the table. An exception is that you can truncate the table if the integrity constraint is self-referential."
3 мар 15, 14:06    [17337260]     Ответить | Цитировать Сообщить модератору
 Re: Отключение всех отношений между таблицами базы  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
Glory
verter
Это не эквивалент оракловскому truncate хоть и так же называется. В Оракле данные удаляются безусловно даже если есть какие-нибудь foreign keys, в mssql будет ругань.

Если бы все команды mssql были эквивалентны oracle, то mssql назывался бы oracle. Или наоборот
Так и будет!

Miracle
3 мар 15, 14:08    [17337270]     Ответить | Цитировать Сообщить модератору
 Re: Отключение всех отношений между таблицами базы  [new]
verter
Member

Откуда: Санкт-Петербург
Сообщений: 998
Glory
Если бы все команды mssql были эквивалентны oracle, то mssql назывался бы oracle. Или наоборот

Остро. Но вы не правы. Я ведь искал именно эквивалент команды оракл truncate. Вы мне сообщили, что он есть и также называется. Оказалось, что эта команда в MSSQL с таким же названием truncate не является эквивалентом одноимённой оракловской. Т.е. ваш ответ не является ответом на мой вопрос.
3 мар 15, 16:15    [17338236]     Ответить | Цитировать Сообщить модератору
 Re: Отключение всех отношений между таблицами базы  [new]
Glory
Member

Откуда:
Сообщений: 104760
verter
Оказалось, что эта команда в MSSQL с таким же названием truncate не является эквивалентом одноимённой оракловской.

является. С почти такими же ограничениями насчет внешних ключей.
К тому же вы слово "наподобие" не является синонимом "точно такое"
3 мар 15, 16:21    [17338278]     Ответить | Цитировать Сообщить модератору
 Re: Отключение всех отношений между таблицами базы  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
С трудом верится, что Оракле лихо ломает транкейтом целостность данных.
3 мар 15, 18:04    [17339021]     Ответить | Цитировать Сообщить модератору
 Re: Отключение всех отношений между таблицами базы  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
офф: констрейнты - зло. Помогают редко, а мешают постоянно. :)
Не даром в большинстве инф.систем их умышленно не используют.
3 мар 15, 18:09    [17339041]     Ответить | Цитировать Сообщить модератору
 Re: Отключение всех отношений между таблицами базы  [new]
Jaffar
Member

Откуда:
Сообщений: 633
verter,


После наката данных нужно FK включать?
+ еще вопросы будут скорее всего с identity полями которые тоже на время вставки нужно будет отключать.

https://www.sql.ru/articles/mssql/01061601.shtml
4 мар 15, 06:32    [17340492]     Ответить | Цитировать Сообщить модератору
 Re: Отключение всех отношений между таблицами базы  [new]
babona
Member [заблокирован]

Откуда: Батуринск
Сообщений: 1816
LSV
офф: констрейнты - зло. Помогают редко, а мешают постоянно. :)
Не даром в большинстве инф.систем их умышленно не используют.


ага, а тормоза в автомобилях тоже зло - мешают четким поцанам гонять по трассам
4 мар 15, 20:47    [17344062]     Ответить | Цитировать Сообщить модератору
 Re: Отключение всех отношений между таблицами базы  [new]
Изопропил
Member

Откуда:
Сообщений: 31529
LSV
Помогают редко, а мешают постоянно. :)

как плохому танцору
5 мар 15, 00:50    [17344628]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить