概述
简单来说:一个能够自动执行事务的存储过程
弊端:如果在程序中也写了增删改则会 改变程序的输出结果
创建一个表先:
create table good
(
id int primary key identity (1,1),
gid int unique not null,
goodName varchar(200) not null,
number int check (number>=0)
)
create table sale
(
gid int references good(gid),
number int check (number>=0),
time datetime default(getdate())
)
insert into good values(1,'联想小新潮-Pro13',100)
insert into good values(2,'华为P40 ',999)
insert into good values(3,'苹果P12 ',666)
添加触发器:
---创建触发器(在sale表中number+1,good表中 number-1)
go
create trigger salegood
---在sale表上创建触发器 当sale 插入数据时触发触发器
----on 代表监听那张表
----for 表示监听哪一个动作
on sale for insert
as
---声明变量@gid,@number
declare @gid int,@number int
----在instered新数据临时表中查询出来添加的gid,number///delted 表是删除之前的
select @gid=gid,@number=number from inserted
---根据要跟新的gid 更新触发器所要触发的表的所对应列
update good set number=number-@number where gid=@gid
go
insert into sale values(1,2,GETDATE())
insert into sale values(2,2,GETDATE())
insert into sale values(3,300,GETDATE())
删除触发器
go
create trigger updategood
---监听主表 物品先卖出产生消费记录导致仓库减少
on sale for update
as
--- 声明变量1为变化后的参数
declare @gid int,@number int
select @gid=gid,@number=number from inserted
--- 声明变量1为变化后的参数 deleted 表更新之前的旧数据
declare @gid2 int,@number2 int
select @gid2=gid,@number2=gid from deleted
---更新商品表number的值=原有值-(变化后得参数@number2-@修改前的参数@number)
update good set number=number-(@number-@number2) where gid=@gid
go
update sale set number=300 where gid=2
修改触发器
---删除触发器(如果是重要的数据不能进行删除,则进行数据回滚)
go
create trigger deletegood
---监听主表 物品先卖出产生消费记录导致仓库减少
on sale for delete
as
rollback tran
go
delete from sale where gid=1
最后
以上就是会撒娇季节为你收集整理的SQL查询 ——如何使用触发器的全部内容,希望文章能够帮你解决SQL查询 ——如何使用触发器所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复