SQL中,如何创建一个有条件的触发器
发布网友
发布时间:2022-04-13 09:22
我来回答
共3个回答
热心网友
时间:2022-04-13 10:51
以 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’,即阻止删除,提示‘错误’
热心网友
时间:2022-04-13 12:09
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触发器的话可以完全避免这个问题
热心网友
时间:2022-04-13 13:44
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
--呵呵,抄的上面仁兄的回答,改了一下。