zoukankan      html  css  js  c++  java
  • 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的触发器实现,使用触发器实现是基于级联删除!这个大家自行查询资料!

     @陈卧龙的博客

  • 相关阅读:
    [转]maven插件的开发
    开发建议
    [转]利用maven的surefire插件实现单元测试与集成测试
    sonar-maven-plugin错误2
    20145218张晓涵_网络欺诈技术防范
    20145218张晓涵_信息搜集与漏洞扫描
    20145218张晓涵_Exp5 MSF基础应用
    20145218张晓涵 PC平台逆向破解_advanced
    20145218张晓涵 恶意代码分析
    20145218 免杀原理与实践
  • 原文地址:https://www.cnblogs.com/chenwolong/p/Proc.html
Copyright © 2011-2022 走看看