SQL Server выполняет удаление во всех дочерних записях при удалении из родительского

У меня 3 таблицы:

Create TABLE Subjects ( SubjectID INT PRIMARY KEY NOT NULL IDENTITY(1,1), SubjectName VARCHAR(20) NOT NULL, ClassID VARCHAR(10) FOREIGN KEY REFERENCES Classes(ClassID) NOT NULL ); Create TABLE Topic ( TopicID INT PRIMARY KEY NOT NULL IDENTITY(1,1), TopicName VARCHAR(100), SubjectID INT FOREIGN KEY REFERENCES Subjects(SubjectID) ); Create Table Worksheet ( WorksheetName varchar(100) PRIMARY KEY, TopicID INT Foreign KEY References Topic(TopicID), Num_Q INT NOT NULL, W_Type varchar(30) ); 

Каждый из них является отношением друг к другу. Когда я пытаюсь удалить из Subjects, я получаю ограничение внешнего ключа, которое нормально. Я хочу знать, как обойти это и выполнить запрос, чтобы удалить все связанные аспекты в каскадном стиле. Я посмотрел на него, и есть, но я не уверен, как это работает, кажется, есть несколько запросов. Было бы лучше создать триггер или есть основная каскадная функция, чтобы сделать все это? Я использую визуальную студию для выполнения запросов, но не знаю, где варианты выполнения таких задач?

Вы можете добавить ON DELETE CASCADE сразу после определения внешнего ключа:

 Create TABLE Subjects ( SubjectID INT PRIMARY KEY NOT NULL IDENTITY(1, 1), SubjectName VARCHAR(20) NOT NULL, ClassID VARCHAR(10) NOT NULL FOREIGN KEY REFERENCES Classes(ClassID) ON DELETE CASCADE ); 

Вы также можете определить его как отдельное ограничение, если хотите, либо в инструкции CREATE TABLE либо с помощью ALTER TABLE ADD CONSTRAINT .

Вот DDL для вашей таблицы « Topic с CASCADE для удаления. Его просто вопрос определения его в вашем FK, но с использованием немного другого синтаксиса . Это для MS Sql Server.

 CREATE TABLE Topic ( TopicID INT PRIMARY KEY NOT NULL IDENTITY(1,1), TopicName VARCHAR(100), SubjectID INT, CONSTRAINT FK_Subjects_Topic FOREIGN KEY (SubjectID) REFERENCES Subjects (SubjectID) ON DELETE CASCADE ON UPDATE NO ACTION ) 

EDIT – добавлен DELETE CASCADE в таблицу Worksheet на основе комментариев.

 Create Table Worksheet ( WorksheetName varchar(100) PRIMARY KEY, TopicID INT, Num_Q INT NOT NULL, W_Type varchar(30), CONSTRAINT FK_Topic_Worksheet FOREIGN KEY (TopicID) REFERENCES Topic (TopicID) ON DELETE CASCADE ON UPDATE NO ACTION ); 

С помощью этого обновленного определения удаление в таблице Subjects также удалит дочерние записи в Topics .

  • VS2012 - «Показать данные таблицы»
  • использовать SQL-скрипт для создания базы данных SQL-сервера
  • Вы можете запросить SQL Server непосредственно из конструктора Entity Framework?
  • VS SchemaCompare: создание табличных обновлений
  • Business Intelligence для Visual Studio 2013 с таргетингом на SQL Server 2008 R2
  • Tsql использование CASE КОГДА в ГДЕ для получения данных за один период или все периоды
  • Может ли проект базы данных использовать строку соединения machine.config для развертывания?
  • Microsoft Visual Studio 2013 остановлена ​​Работа при добавлении соединения
  • Visual Studio 2015 без SQL Server
  • Проект базы данных VS2013. Можете ли вы импортировать * изменения *, сделанные в самой базе данных, в проект VS?
  • Сценарий условной файловой группы в проекте базы данных Visual Studio 2010
  • Interesting Posts

    Как сохранить записи datagridview в таблице базы данных?

    Полнотекстовая индексация для представления с несколькими базами данных

    Не удается получить доступ к моей базе данных, созданной с помощью Visual Studio?

    Рекурсия SQL CTE: возвращение родительских записей

    Почему функция Difference дает разные результаты при переключении порядка строк для сравнения?

    Вызов одного и того же метода несколько раз и показать прогресс

    Операторы и скобки SQL Server 2008 AND / OR

    Уведомление для системного лотка – Пожар, когда новая запись создается в SQL Server

    В T-SQL, как принять значение строки, исходя из условий во втором столбце?

    Схема редактирования базы данных Visual Studio 2010 сравнивает, где target является dbproj

    Функция Convert_tz в SQL Server

    Условное разделение в SSIS

    Поиск разрыва строки в текстовой строке таблицы SQL?

    Расширение стержня

    Как создать базу данных и заполнить ее во время установки

    Давайте будем гением компьютера.