[英]Delete All the records Using FOREIGN KEY Constraints if Main Table Entity is deleted
如果主表的實體被刪除,因為在所有表上都施加了約束,那么如何從多個表中刪除記錄
情境
讓我給你一個場景:這個主表叫做Organization
或TblOrganization
。 該組織的分支位於名為tblBranch
分支表中,並且這些分支在表tblApplication
具有多個應用程序。 這些應用程序又被tblUsers
存儲的多個用戶使用。
我想要的是:刪除組織時,還必須刪除與其相關的所有分支機構,應用程序和用戶。
我如何將其應用在按鈕上,單擊asp.net Web表單?
現在這是我的刪除功能,非常簡單
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])
您不能在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
的一行, tblOrganization
該刪除操作也將向下級聯到tblBranchs
表中,同時刪除所有已引用該組織的行。 您可以在多個外鍵約束(直到tblUsers
表)上具有這些ON DELETE CASCADE
設置。
您需要將ON DELETE CASCADE
添加到tblBranch,tblApplication和tblUsers的約束中:
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中刪除的所有相關記錄。
如果刪除用戶,則不會刪除任何其他內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.