如果删除主表实体,则使用FOREIGN KEY约束删除所有记录

时间:2015-10-29 05:36:01

标签: sql asp.net webforms

如果在所有

上应用约束时删除主表的实体,如何从多个表中删除记录

方案

让我给你一个场景:有一个名为OrganizationTblOrganization的主表。此组织具有分支,这些分支位于名为tblBranch的分支表中,并且这些分支在表tblApplication中具有多个应用程序。这些应用程序又由tblUsers中存储的多个用户使用。

我想要的是:当我删除一个组织时,所有与之相关的分支,应用程序和用户也必须被删除。

如何在asp.net网络表单中单击按钮时应用它?

现在这是我的删除功能,非常简单

Public void Delete(int? id)
{
    var str = ”DELETE FROM tblOrganization WHERE organizationId=”+ id ;
}

我的桌子看起来像这样:

CREATE TABLE tblOrganization
(
    OrganizationId int,
    OrganizationName varchar(255)
); 


CREATE TABLE tblApplication
(
     ApplicationId int,
     OrganizationId int,
     ApplicationName varchar(255)
);

CREATE TABLE tblBranches
(
    BranchId int, 
    OrganizationId int,
    BranchName varchar (255)
);

CREATE TABLE tblUsers
(
    userId int,
    OrganizationId int,
    UserName varchar(255)
);

约束适用于所有类似的表

ALTER TABLE [dbo].[tblBranchs] WITH CHECK 
    ADD CONSTRAINT [FK_tblBranchs_tblOrganization] 
    FOREIGN KEY([OrganizationId])
    REFERENCES [dbo].[tblOrganization] ([OrganizationId])

2 个答案:

答案 0 :(得分:0)

你不能"申请"这在ASP.NET中 - 这是数据库关注,您需要更改外键约束以包含ON DELETE CASCADE - 如下所示:

ALTER TABLE [dbo].[tblBranchs] WITH CHECK 
    ADD CONSTRAINT [FK_tblBranchs_tblOrganization] 
    FOREIGN KEY([OrganizationId])
    REFERENCES [dbo].[tblOrganization] ([OrganizationId])
        ON DELETE CASCADE

这意味着:如果删除了来自tblOrganization的行,则该删除将级联向下移动到tblBranchs表中,删除所有引用该行的行orgnization。您可以将多个外键约束的ON DELETE CASCADE设置设置为tblUsers表。

答案 1 :(得分:0)

您需要在tblBranch,tblApplication和tblUsers的约束中添加ON DELETE CASCADE

ALTER TABLE [dbo].[tblBranchs] WITH CHECK 
    ADD CONSTRAINT [FK_tblBranchs_tblOrganization] 
    FOREIGN KEY([OrganizationId])
    REFERENCES [dbo].[tblOrganization] ([OrganizationId])
    ON DELETE CASCADE

ALTER TABLE [dbo].[tblApplication] WITH CHECK 
    ADD CONSTRAINT [FK_tblApplication_tblBranchs] 
    FOREIGN KEY([BranchId])
    REFERENCES [dbo].[tblBranchs] ([BranchId])
    ON DELETE CASCADE

ALTER TABLE [dbo].[tblUsers] WITH CHECK 
    ADD CONSTRAINT [FK_tblUsers_tblApplication] 
    FOREIGN KEY([ApplicationId])
    REFERENCES [dbo].[tblApplication] ([ApplicationId])
    ON DELETE CASCADE

现在,如果删除组织,数据库引擎将自动删除所有相关的子记录:

  • 如果删除组织,将删除tblBranch,tblApplication和tblUsers的所有相关记录。

  • 如果删除分支,则将删除tblApplication和tblUsers的所有相关记录。

  • 如果删除某个应用程序,将删除tblUsers的所有相关记录。

  • 如果删除用户,则不会删除任何其他内容。