ney))
raiserror('每笔交易不能超过2万元,交易失败',16,1)
rollback transaction
end
go
执行:
update bank set currentmoney=currentmoney+200001 where ID=1
列级Update触发器
update 触发器除了跟踪数据的变化(修改)外,还可以检查是否修改了某列的数据
使用update(列)函数检测是否修改了某列
问题:
交易日期一般有系统自动产生,默认为当前日期,为了安全起见,一般禁止修改,以防舞弊
分析:
update(列名)函数可以检测是否修改了某列
create trigger trig_update _transinfo
on transInfo
for update
as
if update(transdate)
begin
print '交易失败......'
RAISERROR('安全警告,交易日期不能修改,有系统自动产生',16,1)
rollback transaction
end
go
4、instead of触发器
create trigger trig_ttotal
on sc
instead of insert
as
begin
insert into TT Values('2007','郑州','zb3',12,3)
end
当在sc表中插入一条记录时,不执行在sc表中插入记录,执行你指定的操作
insert into sc(courseid,studentid,grade) values(1,12,90),
instead of 触发器的用法
INSTEAD OF 触发器的主要优点是可以使不能更新的视图支持更新。基于多个基表的视图必须使用
INSTEAD OF 触发器来支持引用多个表中数据的插入、更新和删除操作。INSTEAD OF 触发器的另一个优点是使您得以编写这样的逻辑代码:在允许批处理的其他部分成功的同时拒绝批处理中的某些部分。
Transact-SQL 语句创建两个基表、一个视图和视图上的 INSTEAD OF 触发器。以下表将个人数据和业务数据分开并且是视图的基表。
/*在视图上定义 instead of insert 触发器以在一个或多个基表中插入数据。*/
--部门表
create table dept
(
d_id int primary key,
d_name varchar(20)
)
--员工表
create table emp
(
e_id int primary key,
e_name varchar(20),
d_id int references dept(d_id)
)
select * from emp
drop view v
create view v
as
select e_id,e_name,d.d_id,d_name from emp e,dept d where e.d_id=d.d_id
select * from v
insert into v values(1001,'张珊',101,'销售部')
/*******************使用instead of 触发器******************/
drop trigger de_em_insert
go
create trigger de_em_insert
on v
instead of insert
as
begin
if (not exists (select d.d_id from dept d, inserted i where d.d_id = i.d_id))
insert into dept select d_id,d_name from inserted
if (not exists (select e.d_id from emp e, inserted i where e.d_id = i.d_id))
insert into emp select e_id,e_name,d_id from inserted
else
update emp set e_id = i.e_id,e_name = i.e_name from emp e, inserted i where e.d_id = i.d_id
end
可以在视图或表中定义 INSTEAD OF DELETE 触发器,以代替 DELETE 语句的标准操作。通常,在视图上定义 INSTEAD OF DELETE 触发器以便在一个或多个基表中修改数据。
可在视图上定义 INSTEAD OF UPDATE 触发器以代替 UPDATE 语句的标准操作。通常,在视图上定义 INSTEAD OF UPDATE 触发器以便修改一个或多个基表中的数据。
触发器是在对表进行插入、更新或删除操作时自动执行的存储过程,触发器通畅用于强制业务规则
触发器是一个特殊的事务单位,当出现错误是,可以执行rollback transaction回滚撤销操作
触发器一般都需要使用临时表,deleted和inserted表,他们存放被删除或插入记录的副本
触发器类型:insert触发器、update触发器、delete触发器
作者“探索者”