特殊存储过程——触发器Trigger
触发器类型
insert 触发器
delete 触发器
update 触发器
Inserted和Deleted两个临时表的作用
Inserted:对于插入记录操作来说,插入表里存放的是要插入的数据;对于更新记录操作来说,插入表里存放的是要更新的记录。
Deleted:对于更新记录操作来说,删除表里存放的是被更新记录;对于删除记录操作来说,删除表里存入的是被删除的旧记录。
即
![](http://upload-images.jianshu.io/upload_images/9128511-0ba5b8e894dba6b0.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/582)
1
参考:http://www.cnblogs.com/liushuijinger/archive/2012/06/10/2543941.html
触发器写法
CREATE TRIGGER Trigger_Name --触发器名,在一个数据库中触发器名是唯一的。
ON Table_Name | View_Name --触发器所在的表或者视图。
AFTER(FOR)|Instead Of INSERT,DELETE,UPDATE --定义成AFTER或Instead Of类型的触发器。
--AFTER跟FOR相同,不可在视图上定义AFTER触发器
-- 后面是触发器被触发的条件,最少有一个,可以邮多个。如果有多个用逗号分开,顺序无要求。
AS --触发器要执行的操作
BEGIN
--BEGIN跟END组成一个代码块,可以写也可以不写,如果触发器中执行的SQL语句比较复杂,用BEGIN和END会让代码更加整齐,更容易理解。
END
GO --GO就代表结操作完毕
例子
create trigger trig_insert_student
on student for insert
as
declare @number int
-- 从inserted临时表中获取记录值
select @number=StudentNumber
from inserted --临时表inserted
update student set Name='触发器修改'
where StudentNumber=@number
go
create trigger trig_insert_transInfo
on transInfo for insert
as
declare @_transType char(4), --定义变量
@_transMoney money,
@_cardID char(10),
@balance money --所剩余额
-- 从inserted临时表中获取记录值
select @_transType = transType,
@_transMoney = transMoney,
@_cardID = cardID
from inserted --临时表inserted
if(@_transType = '支取')
update bank set currentMoney=currentMoney-@_transMoney
where cardID = @_cardID;
else
update bank set currentMoney=currentMoney+@_transMoney
where cardID = @_cardID;
--显示交易金额
print '交易成功! 交易金额:'
+ convert(varchar(20),@_transMoney)
--显示所剩余额
select @balance = currentMoney from bank
where cardId = @_cardID
print '卡号:'+@_cardID
+ ' 余额:'+convert(varchar(20),@balance);
go
参考:http://www.cnblogs.com/xugang/archive/2010/02/20/1669619.html
学习技术最好的文档就是【官方文档】,没有之一。
还有学习资料【Microsoft Learn】、【CSharp Learn】、【My Note】。
如果,你认为阅读这篇博客让你有些收获,不妨点击一下右下角的【推荐】按钮。
如果,你希望更容易地发现我的新博客,不妨点击一下【关注】。