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

     @陈卧龙的博客

  • 相关阅读:
    PowerDesigner最基础的使用方法入门学习
    使用vertx共享数据
    VMware中虚拟机与主机不能ping通解决办法
    Win10系统的SurfacePro4无法修改启动顺序怎么办
    Win10系统的SurfacePro4如何重装系统-4 如何再次备份和还原系统
    Win10系统的SurfacePro4的启动菜单太多怎么管理,UEFI的启动菜单如何编辑
    Win10系统的SurfacePro4如何重装系统-3 重装完成之后的系统优化
    Win10系统的SurfacePro4如何重装系统-2 重装WIN10系统
    Win10系统的SurfacePro4如何重装系统-1 SurfacePro专用的PE
    Win10系统的DELL平板如何重装WIN10系统
  • 原文地址:https://www.cnblogs.com/chenwolong/p/Proc.html
Copyright © 2011-2022 走看看