【问题标题】:deleting values from foreign key tables in SSMS从 SSMS 中的外键表中删除值
【发布时间】:2019-03-18 16:17:18
【问题描述】:

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

 tbl1
 UnitID         PK
 SomeField      varchar
 SomeField2     varchar


 tbl2 
 UnitID         PK
 ServiceID      PK
 SomeField3     varchar


 tbl3
 UnitID         PK
 ChangeID       PK
 SomeField4     varchar

所以我的简单应用中有三个表格。由于一些限制,需要将数据拆分到多个表中

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

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

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

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

应用程序使用 Asp.Net 和 VB.NET 编码

我明白我可以简单地做

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

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

【问题讨论】:

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


    【解决方案1】:

    如果您已经创建了表关系,则删除现有的外键约束,您可以使用级联删除添加新的外键约束。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-30
      • 2012-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-22
      • 2013-01-07
      • 1970-01-01
      相关资源
      最近更新 更多