从SSMS中的外键表中删除值

时间:2019-03-18 16:17:19

标签: asp.net vb.net ssms-2012

假设我有tbl1,tbl2和tbl3,这就是它们的样子

std::optional<DefaultConstructible> dc1({}); // dc1 == std::nullopt
std::optional<DefaultConstructible> dc2(std::in_place); // dc2 == DefaultConstructible()

所以我的简单应用程序中有三个表。由于某些限制,数据需要分为多个表

用户将在tbl1中输入一个UnitID值,然后他们将添加其他数据,并将这些数据存储在tbl2和tbl3中,它们具有相同的UnitID和它们自己的对应PK(ServiceID,ChangeID)。

我要查看是否可以完成操作,如果我从tbl1删除一个值,例如UnitID = 2,我是否可以从具有相同UnitID的tbl2和tbl3中自动删除所有对应的值?还是基本上每个表都必须有一条delete语句?

我发现一个doc是指删除外键关系,但它表明它正在启动SQL 2016,我正在使用SSMS 2012。

像这样可能吗?我问的原因是因为这是我的表的非常简化的视图,实际上我将有大约20个表,并且可能有时需要从应用程序中的每个表中删除该UnitID。我正在尝试使代码尽可能高效。

该应用使用Asp.Net和VB.NET编码

我知道我可以做到

 tbl1
 UnitID         PK
 SomeField      varchar
 SomeField2     varchar


 tbl2 
 UnitID         PK
 ServiceID      PK
 SomeField3     varchar


 tbl3
 UnitID         PK
 ChangeID       PK
 SomeField4     varchar

但这似乎很乏味。任何帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:2)

如果已经创建了表关系,则可以丢弃现有的外键约束,并且可以通过级联删除来添加新的外键约束。

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删除来限制外键。

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
);