удаление значений из таблиц внешнего ключа в SSMS - PullRequest
0 голосов
/ 18 марта 2019

Допустим, у меня есть tbl1, tbl2 и tbl3, вот как они выглядят

 tbl1
 UnitID         PK
 SomeField      varchar
 SomeField2     varchar


 tbl2 
 UnitID         PK
 ServiceID      PK
 SomeField3     varchar


 tbl3
 UnitID         PK
 ChangeID       PK
 SomeField4     varchar

ТАК У меня есть три таблицы в моем простом приложении.Из-за некоторых ограничений данные необходимо разделить на несколько таблиц

. Пользователь перейдет к вводу значений UnitID в tbl1, затем они добавят дополнительные данные, и эти данные будут сохранены в tbl2 и tbl3 стот же UnitID и их собственные соответствующие PK (ServiceID, ChangeID).

Что я могу посмотреть, можно ли это сделать, если я удалю значение из tbl1, скажем, UnitID = 2, могу ли я автоматически удалить все соответствующие значения из tbl2 и tbl3 с тем же UnitID?Или мне нужно в основном иметь оператор удаления для каждой таблицы?

Я нашел doc , который ссылается на удаление отношений внешнего ключа, но он показывает, что он запускает SQL 2016, я 'Я работаю в SSMS 2012.

Возможно ли что-то подобное?Причина, по которой я спрашиваю, состоит в том, что это очень упрощенное представление моих таблиц, у меня фактически будет около 20 таблиц, и может быть время, когда мне нужно будет удалить этот UnitID из каждой отдельной таблицы в моем приложении.Я пытаюсь сделать код максимально эффективным.

Приложение написано на Asp.Net и VB.NET

Я понимаю, что могу просто сделать

Delete * from tbl1 where UnitID=2
Delete * from tbl2 where UnitID=2

но это кажется утомительным.Любая помощь будет оценена.Спасибо.

1 Ответ

2 голосов
/ 18 марта 2019

Удалите существующее ограничение внешнего ключа, если вы уже создали свои связи таблиц и можете добавить новое ограничение внешнего ключа с помощью каскадного удаления.

ALTER TABLE child_table
ADD CONSTRAINT fk_name
    FOREIGN KEY (child_col1, child_col2, ... child_col_n)
    REFERENCES parent_table (parent_col1, parent_col2, ... parent_col_n)
    ON DELETE CASCADE;

Если вы собираетесь создавать новые таблицы, вы можете иметь ограничение внешнего ключа с помощью Cascade delete.

CREATE TABLE child_table
( parent_col1 INT PRIMARY KEY,
  parent_col1 INT NOT NULL,
   CONSTRAINT fk_name
    FOREIGN KEY (child_col1, child_col2, ... child_col_n)
    REFERENCES products (parent_col1, parent_col2, ... parent_col_n)
    ON DELETE CASCADE
);
...