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

题目是这样的,创建一insert触发器,,要求插入学生表中的院系必须是‘信息学院’否则提示:插入学生院系为信息学院

以 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’,即阻止删除,提示‘错误’


温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-12-16
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触发器的话可以完全避免这个问题本回答被网友采纳
第2个回答  2010-06-06
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
--呵呵,抄的上面仁兄的回答,改了一下。
相似回答