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 ...
随机推荐
- cropper实现基本的裁剪图片并上传
使用cropper之前需要先引用 cropper.css 和 cropper.js cropper 官网:https://fengyuanchen.github.io/cropper/ cropper ...
- Scrapy爬取遇到的一点点问题
学了大概一个月Scrapy,自己写了些东东,遇到很多问题,这几天心情也不大好,小媳妇人也不舒服,休假了,自己研究了很久,有些眉目了 利用scrapy 框架爬取慕课网的一些信息 步骤一:新建项目 scr ...
- 解决pycharm下代码报错的问题
file-----settings------project:Pythonstudy------project structure-----选择要导入的文件并点击OK
- ubuntu 14.04安装zabbix3.0以及汉化
文章出处借鉴于 http://www.cnblogs.com/-10086/p/5317524.html 1.下载deb # wget http://repo.zabbix.com/zabbix/3. ...
- MDX 脚本语句 -- Scope
在多维表达式 (MDX) 中,下列语句用于管理 MDX 脚本中的上下文.作用域和流控制. 主题 说明 calculate语句 计算子多维数据集,还可以确定子多维数据集中所包含的求解次序 case语句 ...
- SpringMVC 使用JSR-303进行校验 @Valid
注意:1 public String save(@ModelAttribute("house") @Valid House entity, BindingResult result ...
- 基于jquery的从一个页面跳转到另一个页面的指定位置的实现代码
比如 想跳到 mao.aspx 的页面 的div id="s" 的位置 那么 只用<a href="mao.aspx#s"> 就可实现跳转到指定位置 ...
- [ ArcGIS for Server 10.1 系列 ] - 重新创建Site
一般当ArcGIS Server Site发生错误.ArcGIS Server无法启动或者ArcGIS Server某服务没有实例,就可能需要重新的创建Site.有时可以通过重新创建Site,就发现其 ...
- javascript中DOM0,DOM2,DOM3级事件模型解析
DOM 即 文档对象模型. 文档对象模型是一种与编程语言及平台无关的API(Application programming Interface),借助于它,程序能够动态地访问和修改文档内容.结构或显示 ...
- 接上篇elasticsecrchi 进行搜索及时提示,数据库以及后台代码
-- ------------------------------ Table structure for articles-- ----------------------------DROP TA ...