SQL中,如何创建一个有条件的触发器 10

题目是这样的,创建一insert触发器,,要求插入学生表中的院系必须是‘信息学院’否则提示:插入学生院系为信息学院... 题目是这样的,创建一insert触发器,,要求插入学生表中的院系必须是‘信息学院’否则提示:插入学生院系为信息学院 展开
 我来答
hy1397471
2015-11-16 · 知道合伙人软件行家
hy1397471
知道合伙人软件行家
采纳数:4714 获赞数:17154
15年数据库维护及数据库应用系统开发经验,从事零售业、服务业及财务管理类系统开发与维护。

向TA提问 私信TA
展开全部

以 delete 触发为例:

create trigger tri_delete
on a --将要进行更改的表名
for delete --给表删除一条数据的时候触发
as
declare @aa varchar(10)
select @aa=a from deleted
if @aa='a' --处理的条件
begin
    raiserror('错误',16,8)
    rollback tran
end

触发器效果:删除表a数据,如果a列为 ‘a’,即阻止删除,提示‘错误’


华夏日长兴
推荐于2017-12-16 · TA获得超过9592个赞
知道大有可为答主
回答量:6305
采纳率:85%
帮助的人:3732万
展开全部
create table 学生表 (姓名 varchar(20),院系 varchar(20),primary key(姓名))
go
create trigger tr_学生表
on 学生表 instead of insert
as
begin
if (select 院系 from inserted)<>'信息学院'
raiserror('插入学生院系应为信息学院',16,1)
else
insert into 学生表 select * from inserted
end
go

insert into 学生表 values ('1','1')

楼上的代码也不错,但是有个缺点,就是如果用代码一次输入多条记录的话,在中间如果有不满足条件的记录的话,那么从这条记录以后的数据都会回滚,因为用到了rollback tran事务处理,如果用instead of触发器的话可以完全避免这个问题
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Hcyhi
2010-06-06 · TA获得超过217个赞
知道小有建树答主
回答量:267
采纳率:0%
帮助的人:168万
展开全部
create table 学生表 (姓名 varchar(20),院系 varchar(20),primary key(姓名))
go
create trigger tr_学生表
on 学生表 after insert
as
begin
if not exists(select 1 from inserted where 院系='信息学院')
begin
rollback tran
raiserror('插入学生院系应为信息学院',16,1)

end
end
--呵呵,抄的上面仁兄的回答,改了一下。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式