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# 如何物理删除有主外键约束的记录?存储过程实现的更多相关文章
- 批量删除MSSQL 中主外键约束
转自: http://www.maomao365.com/?p=813 在制作 MSSQL同步工具的时候,发现由于主外键的约束,导致数据同步异常,所有我们需要把 读数据库里面的主外键约束,进行批量删除 ...
- Oracle开发 之 主-外键约束FK及约束的修改
试验环境: 1)数据库版本:oracle 11.2.0.4 2)建表脚本:以scott的dept及emp表为基础. 父表:dept -- Create table create table DEPT ...
- 【SQL Server DBA】维护语句:删除并创建外键约束、获取建表语句
原文:[SQL Server DBA]维护语句:删除并创建外键约束.获取建表语句 1.删除外键约束,建立外键约束 先建立3个表: /* drop table tb drop table tb_b dr ...
- MySQL 主外键约束与标准SQL不同的地方
[标准SQL的外键约束条件] 1): 子表引用父表的主键 drop table if exists child,parent; create table if not exists parent( i ...
- SQL server 添加主外键约束
---添加主键约束 alter table 表名 add constraint 约束名 primary key (主键) - --添加唯一约束 alter table 表名 ...
- oracle 查看主外键约束
select a.constraint_name, a.table_name, b.constraint_name from user_constraints a, user_constraints ...
- sql数据库删除表的外键约束(INSERT 语句与 FOREIGN KEY 约束"XXX"冲突。该冲突发生于数据库"XXX",表"XXX", column 'XXX)
使用如下SQL语句查询出表中外键约束名称: 1 select name 2 from sys.foreign_key_columns f join sys.objects o on f.constra ...
- 通过sql命令建表 和 主外键约束以及其他约束
create table命令 create table dept ( dept_id int primary key, dept_name ) not null, dept_address ) ) c ...
- SQL级联删除——删除主表同时删除从表——同时删除具有主外键关系的表
create table a(id varchar(20) primary key,password varchar(20) not null) create table b(id int iden ...
随机推荐
- 简单的TabLayout+Fragment选项卡
TabLayout属性: app:tabIndicatorColor="#fff" //下方滚动的下划线颜色 app:tabIndicatorHeight="10dp& ...
- python正则表达式模块re:正则表达式常用字符、常用可选标志位、group与groups、match、search、sub、split,findall、compile、特殊字符转义
本文内容: 正则表达式常用字符. 常用可选标志位. group与groups. match. search. sub. split findall. compile 特殊字符转义 一些现实例子 首发时 ...
- [20170705]diff比较执行结果的内容.txt
[20170705]diff比较执行结果的内容.txt --//有时候需要比较2个命令输出的结果进行比较,比较笨的方法如下,例子: $ lsnrctl status LISTENER_SCAN2 & ...
- 数据层的多租户浅谈(SAAS多租户数据库设计)
在上一篇“浅析多租户在 Java 平台和某些 PaaS 上的实现”中我们谈到了应用层面的多租户架构,涉及到 PaaS.JVM.OS 等,与之相应的是数据层也有多租户的支持. 数据层的多租户综述 多租户 ...
- tkinter学习系列之(五)Checkbutton控件
目录 目录 前言 (一)基本属性 (二)案例 1.简单的复选框 2.组合复选框 目录 前言 复选框:可以同时多选的一组框,其只有两种状态,选中与未选中. (一)基本属性 (1)说明: tkinter里 ...
- ghostscript远程代码执行漏洞复现
这两天网上ghostscript又又有漏洞信息了,但是没有poc,于是找找资料把今年8月21日的那个验证下 1.关于ghostscript Ghostscript是一套建基于Adobe.PostScr ...
- SAP ABAP 查找用户出口
1.查找事物代码程序名 2.查找用户出口 T-CODE:SE80 在子例程中查找以USEREXIT开头的子程序.
- log4.net 配置 - 自定义过滤器按LoggerName过滤日志
自定义过滤器按LoggerName过滤日志,本来想使用 PropertyFilter 来实现,后来研究发现一直不能成功,源代码debug了一下获取一直为null,时间关系只好用 StringMatch ...
- Java设计模式之二 ----- 工厂模式
在上一篇中我们学习了单例模式,介绍了单例模式创建的几种方法以及最优的方法.本篇则介绍设计模式中的工厂模式,主要分为简单工厂模式.工厂方法和抽象工厂模式. 简单工厂模式 简单工厂模式是属于创建型模式,又 ...
- css设置标签居中
position: absolute; //相对于已经定位的父元素的位置. left: 50%; top: 50%; transform: translate(-50%,50%);