Если я хочу удалить все таблицы в моей базе данных, как это, позаботится ли об ограничении внешнего ключа? Если нет, то как мне позаботиться об этом в первую очередь?
GO
IF OBJECT_ID('dbo.[Course]','U') IS NOT NULL
DROP TABLE dbo.[Course]
GO
IF OBJECT_ID('dbo.[Student]','U') IS NOT NULL
DROP TABLE dbo.[Student]
Ответы:
Нет, это не удалит вашу таблицу, если на нее действительно ссылаются внешние ключи.
Чтобы получить все отношения внешних ключей, ссылающиеся на вашу таблицу, вы можете использовать этот SQL (если вы используете SQL Server 2005 и выше):
и если они есть, с этим оператором здесь, вы можете создать операторы SQL, чтобы фактически отбросить эти отношения FK:
источник
В SQL Server Management Studio 2008 (R2) и новее вы можете щелкнуть правой кнопкой мыши на
Выберите таблицы, которые вы хотите DROP.
Выберите «Сохранить в новом окне запроса».
Нажмите на кнопку Дополнительно.
Установите Script DROP и CREATE на Script DROP.
Установите для внешних ключей скрипта значение True.
Нажмите ОК.
Нажмите Далее -> Далее -> Готово.
Просмотрите сценарий и затем выполните.
источник
Если вы сначала удалите «дочернюю» таблицу, внешний ключ также будет удален. Если вы попытаетесь сначала удалить «родительскую» таблицу, вы получите «Не удалось удалить объект« a », поскольку на него ссылается ограничение FOREIGN KEY». ошибка.
источник
Вот еще один способ правильно отбросить все таблицы, используя
sp_MSdropconstraints
процедуру. Самый короткий код, который я мог придумать:источник
Если это SQL Server, вы должны удалить ограничение, прежде чем вы можете удалить таблицу.
источник
Чуть более общая версия того, что разместил @mark_s, это помогло мне
просто подключите имя таблицы и выполните результат.
источник
Вот еще один способ удалить все ограничения, за которыми следуют сами таблицы, используя прием конкатенации,
FOR XML PATH('')
который позволяет объединить несколько входных строк в одну выходную строку. Должен работать на любом SQL 2005 и более поздних версиях.Я оставил команды EXECUTE закомментированными для безопасности.
источник
Вот полный скрипт для реализации решения:
источник
источник
Используя SQL Server Manager, вы можете удалить ограничения внешнего ключа из пользовательского интерфейса. Если вы хотите удалить таблицу,
Diary
но у таблицы User есть внешний ключ,DiaryId
указывающий наDiary
таблицу, вы можете развернуть (используя символ плюс)User
таблицу, а затем развернутьForeign Keys
раздел. Щелкните правой кнопкой мыши по внешнему ключу, который указывает на таблицу дневников, затем выберитеDelete
. Затем вы можете развернутьColumns
раздел, щелкнуть правой кнопкой мыши и удалить столбецDiaryId
. Тогда вы можете просто запустить:Я знаю, что ваш фактический вопрос касается удаления всех таблиц, так что это может быть бесполезно в этом случае. Однако, если вы просто хотите удалить несколько таблиц, я считаю, что это полезно (в заголовке явно не упоминается удаление всех таблиц).
источник
Если вы работаете на сервере MySQL и не возражаете против потери таблиц, вы можете использовать простой запрос для удаления нескольких таблиц одновременно:
Таким образом, не имеет значения, в каком порядке вы используете таблицу в запросе.
Если кто-то собирается что-то сказать о том, что это не очень хорошее решение, если у вас есть база данных с множеством таблиц: я согласен!
источник
Incorrect syntax near '='. (102) (SQLExecDirectW)
foreign_key_checks
не будет работать на сервере MSSQL. Я думаю, что это специфическая переменная MySql.выполните приведенный ниже код, чтобы получить имя ограничения внешнего ключа, которое блокирует ваш сброс. Например, я беру за
roles
стол.Вы получите имя FK как показано ниже:
FK__Table1__roleId__1X1H55C1
Теперь запустите приведенный ниже код, чтобы удалить ссылку FK, полученную сверху.
Готово!
источник
Тогда намного проще отбросить всю базу данных:
источник
Если вы хотите
DROP
таблицу, на которую ссылалась другая таблица с использованием внешнего ключа, используйтеDROP TABLE *table_name* CASCADE CONSTRAINTS;
Я думаю, что это должно работать для вас.
источник
cascade constraints
на сервере sql