powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Удаление таблицы с первичным ключом?
25 сообщений из 38, страница 1 из 2
Удаление таблицы с первичным ключом?
    #40016480
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет. Подскажите, была большая таблица с индексами, я создал копию таблицы и перенес в неё данные. Теперь я хочу удалить старую таблицу, но получаю вот такую ошибку:

Код: sql
1.
Could not drop object 'dbo.Authors_old' because it is referenced by a FOREIGN KEY constraint. (Microsoft SQL Server, Error: 3726)



Подскажите, как в правильном порядке удалить этот ключ и удалить таблицу?
...
Рейтинг: 0 / 0
Удаление таблицы с первичным ключом?
    #40016484
Фотография DeColo®es
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teCa,
1. Найти все таблицы, которые ссылаются на удаляемую, удалить там соответствующие FOREIGN KEY
2. Удалить таблицу
...
Рейтинг: 0 / 0
Удаление таблицы с первичным ключом?
    #40016491
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DeColo®es
teCa,
1. Найти все таблицы, которые ссылаются на удаляемую, удалить там соответствующие FOREIGN KEY
2. Удалить таблицу


Плохой совет.

Судя по всему, тредстартер не лыка не вяжет в том "что там у него за связи между таблицами".
Щас он фсе удалит, а потом прискачет с вопросом "а чего у меня ничего не работает"?
...
Рейтинг: 0 / 0
Удаление таблицы с первичным ключом?
    #40016495
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222,

Именно, понятно, что сначала хотелось бы выяснить, что это за связь и как правильно с ней поступить.
...
Рейтинг: 0 / 0
Удаление таблицы с первичным ключом?
    #40016511
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleks222
Плохой совет.

И, наверняка, ведь, кроме удаления старых FK надо будет создать такие же новые, на копию таблицы.
...
Рейтинг: 0 / 0
Удаление таблицы с первичным ключом?
    #40016515
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо сначала выполнить такой запрос:

Модератор: Не смешно

После этого спокойно уже удаляешь таблицу, как обычно.
...
Рейтинг: 0 / 0
Удаление таблицы с первичным ключом?
    #40016516
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
Надо сначала выполнить такой запрос:

После этого спокойно уже удаляешь таблицу, как обычно.


Смешно
...
Рейтинг: 0 / 0
Удаление таблицы с первичным ключом?
    #40016541
Фотография DeColo®es
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teCa
aleks222,

Именно, понятно, что сначала хотелось бы выяснить, что это за связь и как правильно с ней поступить.

https://ru.wikipedia.org/wiki/Внешний_ключ
...
Рейтинг: 0 / 0
Удаление таблицы с первичным ключом?
    #40016542
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teCa,

информацию о ключах можно получить из представления sys.foreign_key_columns.
...
Рейтинг: 0 / 0
Удаление таблицы с первичным ключом?
    #40016550
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов,

Можно всё же побольше информации?

Используя select * from sys.foreign_key_columns, я получаю список из нескольких записей, вижу, что в списке указаны ИД, как я понимаю, сейчас мне нужно понять, какой ключ из данного списка нужен мне?
...
Рейтинг: 0 / 0
Удаление таблицы с первичным ключом?
    #40016561
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Удаление таблицы с первичным ключом?
    #40016571
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teCa
Смешно

Обхохочешься

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
DECLARE @table_to_drop sysname = 'Customers'

DECLARE cur_fk CURSOR FOR
  SELECT [name] fk_name, object_name(parent_object_id) tbl_name
  FROM sys.foreign_keys
  WHERE referenced_object_id = object_id(@table_to_drop)

DECLARE @fk_name sysname,
  @tbl_name sysname,
  @sql nvarchar(512)

OPEN cur_fk
FETCH NEXT FROM cur_fk INTO @fk_name, @tbl_name
WHILE @@FETCH_STATUS = 0 BEGIN
  SET @sql = 'alter table ' + @tbl_name + ' drop constraint ' + @fk_name
  EXEC sp_executesql @sql
  FETCH NEXT FROM cur_fk INTO @fk_name, @tbl_name
END
CLOSE cur_fk
DEALLOCATE cur_fk


Только это еще не создаст тебе ключи на копии таблицы (как я выше писал), а, скорее всего, это делать надо будет.
...
Рейтинг: 0 / 0
Удаление таблицы с первичным ключом?
    #40016584
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,

Да, изначально нужно перевести ключи на новую таблицу.
...
Рейтинг: 0 / 0
Удаление таблицы с первичным ключом?
    #40016590
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teCa
Да, изначально нужно перевести ключи на новую таблицу.
Самый простой способ для начинающих:

1. Разрешить в опциях SSMS пересоздавать таблицы из дизайнера.
2. Открыть в дизайнере старую таблицу и добавить какой-нибудь столбец. Переместить вновь добавленный столбец с последней позиции в любое другое место.
3. Получить скрипт изменений.
4. В данном скрипте удалить из тела транзакции все, кроме инструкцийй alter table ... drop constraint ... и alter table ... add constraint ...
5. Профит.
...
Рейтинг: 0 / 0
Удаление таблицы с первичным ключом?
    #40016605
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm
teCa
Да, изначально нужно перевести ключи на новую таблицу.
Самый простой способ для начинающих:

1. Разрешить в опциях SSMS пересоздавать таблицы из дизайнера.
2. Открыть в дизайнере старую таблицу и добавить какой-нибудь столбец. Переместить вновь добавленный столбец с последней позиции в любое другое место.
3. Получить скрипт изменений.
4. В данном скрипте удалить из тела транзакции все, кроме инструкцийй alter table ... drop constraint ... и alter table ... add constraint ...
5. Профит.

Можно проще - скриптануть все нужные FK и в скрипте поменять имя reference-таблицы.
...
Рейтинг: 0 / 0
Удаление таблицы с первичным ключом?
    #40016623
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
Можно проще - скриптануть все нужные FK
Поделитесь знаниями - что нужно сказать штатному скриптеру, что бы такое провернуть?
...
Рейтинг: 0 / 0
Удаление таблицы с первичным ключом?
    #40016628
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm
fkthat
Можно проще - скриптануть все нужные FK
Поделитесь знаниями - что нужно сказать штатному скриптеру, что бы такое провернуть?

...
Рейтинг: 0 / 0
Удаление таблицы с первичным ключом?
    #40016632
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat,

Т.е. предлагаете скриптовать каждую дочернюю таблицу? И чем же это проще?
...
Рейтинг: 0 / 0
Удаление таблицы с первичным ключом?
    #40016633
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
invm
Поделитесь знаниями - что нужно сказать штатному скриптеру, что бы такое провернуть?

А если таблиц много, то можно скрипт на базе сделать, а потом скопировать ту часть, где FK.
...
Рейтинг: 0 / 0
Удаление таблицы с первичным ключом?
    #40016639
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я бы предложил воспользоваться Smo.
...
Рейтинг: 0 / 0
Удаление таблицы с первичным ключом?
    #40016653
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm
Т.е. предлагаете скриптовать каждую дочернюю таблицу? И чем же это проще?

А, я понял о чем ты, просто изначально в твой хак не въехал. Да, если доч. таблиц много, то твоим способом быстрее.
...
Рейтинг: 0 / 0
Удаление таблицы с первичным ключом?
    #40016755
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fkthat
invm
Т.е. предлагаете скриптовать каждую дочернюю таблицу? И чем же это проще?

А, я понял о чем ты, просто изначально в твой хак не въехал. Да, если доч. таблиц много, то твоим способом быстрее.
Не понимаю смысла "хака", по моему, скриптануть все таблицы проще, меньше кликов.
...
Рейтинг: 0 / 0
Удаление таблицы с первичным ключом?
    #40016759
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
Не понимаю смысла "хака"
Смысл в том, что студия сама сгенерирует удаление/создание FK для дочерних таблиц. К тому же, еще и не обязательно знать перечень этих таблиц.
...
Рейтинг: 0 / 0
Удаление таблицы с первичным ключом?
    #40016773
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg
fkthat
пропущено...

А, я понял о чем ты, просто изначально в твой хак не въехал. Да, если доч. таблиц много, то твоим способом быстрее.
Не понимаю смысла "хака", по моему, скриптануть все таблицы проще, меньше кликов.

Смысл в том, чтобы не скриптовать все дочерние таблицы/ключи по очереди, а скриптануть все это одним махом, вызвав изменения в таблице родительской.
...
Рейтинг: 0 / 0
Удаление таблицы с первичным ключом?
    #40016923
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, речь о дочерних таблицах, да, это я упустил...
...
Рейтинг: 0 / 0
25 сообщений из 38, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Удаление таблицы с первичным ключом?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]