首页 > 代码库 > C# 如何物理删除有主外键约束的记录?存储过程实现
C# 如何物理删除有主外键约束的记录?存储过程实现
十年河东,十年河西,莫欺少年穷
本篇主旨是如何物理删除有主外键约束的记录!那么,我们从主外键走起!
下面新建三张有主外键约束的表,分别为:系/学院表,专业班表,学生表,如下:
CREATE TABLE Dept--系/学院表 ( DeptId int identity(1,1) primary key, DeptName nvarchar(50),--系名称 AddTime datetime default(getdate()) ) CREATE TABLE Grade--班级表 ( GradeId int identity(1,1) primary key, DeptId int FOREIGN KEY REFERENCES Dept(DeptId), GradeNum varchar(50) unique,--专业班编号 GradeName nvarchar(50),--专业名称 AddTime datetime default(getdate()) ) CREATE TABLE Student ( StudentId int identity(1,1) primary key, GradeId int FOREIGN KEY REFERENCES Grade(GradeId), StudentName nvarchar(50),--学生姓名 SudentSex nvarchar(1) default(‘男‘), )
由上述SQL脚本,我们可以得到:学生表外键于班级表、班级表外键于系/学院表。也就是说:系和班级是1:N 的关系,同理班级和学生也是1:N 的关系。
上述的主外键很清晰!
下面我们新增记录,如下:
由上图,我们可以看出计算机系下,有计算机网络、计算机科学与技术两个专业班。计算机网络、计算机科学与技术两个班级均有两个学生!
现在我们有如下需求:
删除计算机系~
因为有外键约束,所以当我们删除时,会发现删除失败!
而这时我们要做的是:先删除学生表、再删除班级表、最后删除系/学院表。
有了以上思路,我们就可以写存储过程了!
存储过程如下:
create proc DeleteDeptProc ( @DeptId int, @IsSuccess bit=0 output ) as begin delete from [dbo].[Student] where GradeId in (select GradeId from [dbo].[Grade] where DeptId=@DeptId) delete from [dbo].[Grade] where DeptId=@DeptId delete from [dbo].[Dept] where DeptId=@DeptId set @IsSuccess=1 end --执行上述存储过程 DECLARE @DeptId int, @IsSuccess bit SET @DeptId = 1; exec DeleteDeptProc @DeptId,@IsSuccess
执行结果如下(输出参数可以在程序中判断执行是否成功~嘻嘻~):
从上图看出,可以一次性删除完成!
之所以采用存储过程是因为存储过程的特性:要么做,要么不做!这样就保证了数据的完整性!
当然,本节使用存储过程实现的,大家也可以采用SQL的触发器实现,使用触发器实现是基于级联删除!这个大家自行查询资料!
@陈卧龙的博客
C# 如何物理删除有主外键约束的记录?存储过程实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。