首页 > 代码库 > sql触发器
sql触发器
sql触发器
触发器是种特殊的存储过程。特殊在,当增删改的时候自动执行。
建个表如下:
CardTable表
BankTrans表:transMoney为正=存,为负=取。
)插入触发器
create trigger triggerBankTrans
on BankTrans
for insert
as
begin
--对于插入触发器,有一个临时表inserted,这个临时表与我们触所在的表结构一致
--并且里面只有一条数据,这条数据就是用户刚刚插入的这条数据
declare @cardNumber nchar(3),@transMoney money,@currMoney money
select @cardNumber=CardNumber,@transMoney=TransMoney from inserted
update CartTable set CardMoney=CardMoney+@transMoney
where CardNumber=@cardNumber
end
)删除触发器
--创建一个触器,让用户删除卡号表的时候,找一个交易记录有没有本卡的数据,如果有不允许删除
create[alter] trigger triggerCardTable
on CardTable
for delete
as
begin
--删除时有一个临时表叫deleted,里面放的就是用户要删除的数据
declare @cardNumber nchar(3)
select @cardNumber=CardNumber from deleted
if (exists(select * from banktrans where Cardnumber=@cardNumber))
begin
raiserror (‘有交易记录,不允许删除‘,18,3)
rollback --回滚记录
return
end
end
)修改触发器
--只要用户修改cardtable 中的数据,那么就在交易表中添加相应的交易记录
create trigger triggerCardTableupdate
on CardTable
for update
as
begin
--没有updated表,修改可以认为是先删除,再插入,所以老数据在deleted 新数据在inserted
declare @cardNumber nchar(3),@beforeMoney money,@afterMoney money
select @cardNumber = CardNumber from inserted
select @beforeMoney=CardMoney from deleted
select @afterMoney=CardMoney from inserted
insert into banktrans( CardNumber, TransMoney)
values(@cardNumber,@afterMoney-@beforeMoney)
end
实际使用中要考虑很多关系,只作简单演示。
触发器也可不用,直接写存储过程,再调用。
sql触发器