У меня есть 2 таблицы: T1 и T2, это существующие таблицы с данными. У нас есть отношения один ко многим между T1 и T2. Как изменить определения таблиц для выполнения каскадного удаления в SQL Server, когда запись из T1 удаляется, все связанные записи в T2 также удаляются.
Между ними существует внешнее ограничение. Я не хочу удалять таблицы или создавать триггер для удаления T2. Например, когда я удаляю сотрудника, все записи проверок тоже должны быть удалены.
T1 - сотрудник,
Employee ID
Name
Status
T2 - обзоры производительности,
Employee ID - 2009 Review
Employee ID - 2010 Review
sql-server
cascading-deletes
Бичван Нгуен
источник
источник
Чтобы добавить «Каскадное удаление» к существующему внешнему ключу в SQL Server Management Studio:
Сначала выберите ваш внешний ключ и откройте его «DROP and Create To ..» в новом окне запроса.
Затем просто добавьте
ON DELETE CASCADE
вADD CONSTRAINT
команду:И нажмите кнопку «Выполнить», чтобы выполнить этот запрос.
Кстати, чтобы получить список ваших внешних ключей и увидеть, в каких из них включена функция «Каскадное удаление», вы можете запустить этот скрипт:
И если вы когда-нибудь обнаружите, что не можете
DROP
конкретную таблицу из-за ограничения внешнего ключа, но не можете определить, какой FK вызывает проблему, вы можете выполнить эту команду:SQL в этой статье перечисляет все FK, которые ссылаются на конкретную таблицу.
Надеюсь, все это поможет.
Извиняюсь за длинный палец. Я просто пытался сделать точку.
источник
Вы можете сделать это с помощью SQL Server Management Studio.
→ Щелкните правой кнопкой мыши дизайн таблицы и перейдите к Отношениям и выберите внешний ключ на левой панели и на правой панели, разверните меню «ВСТАВИТЬ и ОБНОВИТЬ спецификацию» и выберите «Каскад» в качестве правила удаления.
источник
Используйте что-то вроде
Введите правильные имена столбцов, и вы должны быть установлены. Как правильно указано mark_s, если у вас уже есть ограничение внешнего ключа, вам, возможно, потребуется сначала удалить старый, а затем создать новый.
источник
Свойство First To Enable ONCascade:
1. Отключить существующее ограничение внешнего ключа
2. добавить новый с включенным параметром ON DELETE CASCADE
Пример:
Второе, чтобы отключить свойство ONCascade:
1. Отключить существующее ограничение внешнего ключа
2. Добавьте новый с включенной настройкой ON DELETE NO ACTION
Пример:
источник
ON DELETE CASCADE
Он указывает, что дочерние данные удаляются при удалении родительских данных.
Для этого внешнего ключа мы указали
ON DELETE CASCADE
условие, которое сообщает SQL Server об удалении соответствующих записей в дочерней таблице при удалении данных в родительской таблице. Таким образом, в этом примере, если значение product_id будет удалено из таблицы продуктов, соответствующие записи в таблице инвентаризации, которые используют этот product_id, также будут удалены.источник
Если отношение один ко многим имеет значение от T1 до T2, то оно не представляет функцию и, следовательно, не может быть использовано для вывода или вывода обратной функции, которая гарантирует, что полученное значение T2 не пропускает кортежи соединения T1 T2, которые дедуктивно действительны , потому что нет дедуктивно действительной обратной функции. (Представление функций было целью первичных ключей.) Ответ в SQL - да, вы можете это сделать. Ответ в отношении отношений - нет, ты не можешь этого сделать. См. Пункты двусмысленности в Codd 1970. Отношение должно быть много-к-одному от T1 до T2.
источник
Я думаю, что вы не можете просто удалить свойство таблиц, что если это фактические производственные данные, просто удалите содержимое, которое не влияет на схему таблицы.
источник