创建触发器 阻止用户删除那些已经被学生选修过的课程信息
时间:2011-12-13
来源:互联网
作者: milunda_halun 发布时间: 2011-12-13
作者: qianjin036a 发布时间: 2011-12-13
create trigger tr_name on course for delete as begin if exists(select 1 from 成绩表 where 课程id in(select 课程id from deleted)) rollback end
作者: ssp2009 发布时间: 2011-12-13
on course
for delete
as
set nocount on
if exists (select from deleted where )
begin
RAISERROR ( '不能删除此记录 ')
end
go
if那个地方开始条件我就不怎么会写了
作者: milunda_halun 发布时间: 2011-12-13
create trigger delecourse on course INSTEAD OF delete as begin if not exists(select 1 from 成绩表 a inner join deleted b on a.课程编号=b.课程编号) delete from tb where 课程编号 in(select 课程编号 from deleted) else select '课程已选修,无法删除!' end go
作者: qianjin036a 发布时间: 2011-12-13
create tigger test on course for update,delete as begin if exists(select 1 from score t where exists(select 1 from deleted where coursename=t.coursename)) print '存在信息,不允许删除' end
作者: fredrickhu 发布时间: 2011-12-13
像2楼那样用for 触发器,操作过程是:先删除,再检查,发现不对,再加滚---很有些多此一举的意思.
像5楼那样,更不行了,因为根本就没有回滚,仍然被删除了.
不过 4 楼只写了delete触发器,如果要加 update,也可以,但程序要改一下.
作者: qianjin036a 发布时间: 2011-12-13
if object_id('课程表') is not null drop table 课程表 go create table 课程表 ( 课程id int, 课程名称 varchar(10) ) go insert into 课程表 select 1,'语文' union all select 5,'数学' go --删除触发器 if object_id('tr_课程表_del') is not null drop trigger tr_课程表_del go create trigger tr_课程表_del on 课程表 for delete as if exists(select 1 from 成绩表 a inner join deleted b on a.课程id=b.课程id) begin rollback print '成绩表中存在,不允许删除' end go if object_id('成绩表') is not null drop table 成绩表 go create table 成绩表 ( 学生id int, 课程id int, 分数 int ) go insert into 成绩表 select 1,1,60 delete 课程表 where 课程id=1 --删除终止,提示信息 delete 课程表 where 课程id=5 --删除成功,没有提示信息 select * from 课程表
作者: pengxuan 发布时间: 2011-12-13
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28