如果在所有
上应用约束时删除主表的实体,如何从多个表中删除记录方案
让我给你一个场景:有一个名为Organization
或TblOrganization
的主表。此组织具有分支,这些分支位于名为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])
答案 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的所有相关记录。
如果删除用户,则不会删除任何其他内容。