触发器的操作

触发器的操作
本帖被 raywang 设置为精华(2007-06-29)
1.使用select * into 新表名 from 原表,创建副表 product(产品表products)、cate(种类表category)、
od(订单详细表[order details]) 、emp(员工表employees)

use northwind
select * into em from employees
select * into p from products
select * into cate from dbo.Categories
select * into od from dbo.[Order Details]



2.创建一个更新触发器trg_1,当修改产品表里的信息时,显示产品信息。


use northwind
go
create trigger trg_1
on p
for update
as
select * from p
go

update p
set productname='活'
from p
where productname='chai'
go


3.修改trg_1,当修改产品表时,输出信息“你修改了产品表”


use northwind
go
alter trigger trg_1
on p
for update
as
select '您修改了产品表'
go



update p
set productname='chai'
from p
where productname='活'
go



4.启用、禁用触发器trg_1

use northwind
go
alter table p
disable trigger trg_1
go


use northwind
go
alter table p
enable trigger trg_1
go



5.删除触发器trg_1

drop trigger trg_1



6.insert触发器的使用方法:定义触发器trg_od_pr(库存的减少)
例如:在订购产品(无任何时插入一条纪录到[oreder details]表中)时更新products表中的一列(
unitsinstock),用原来的值减去订购的数量即为新值。

use northwind
go
create trigger trg_od_pr
on od
for insert
as
update dbo.p
set UnitsInStock=UnitsInStock-inserted.Quantity
from inserted
join p
on inserted.productid=p.productid
go


7.插入一条纪录触发trg_od_pr 检验效果。

insert od values (98765,1,15,10,0.1)


8.delete触发器的使用方法:定义触发器trg_del_employee
例如:用触发器实现对employees表的监测,如果用户一次删除纪录多与一条,
取消此次操作,并给用户一个提示信息“你不允许一次删除多条纪录”


use master
go
exec sp_help 'sp_addmessage'

exec sp_addmessage 50008,16,'您不允许一次删除多条记录','english','false','replace'

raiserror (50008,16,1)

use northwind
go
create trigger trg_del_employee
on dbo.em
for delete
as
if (select count(*) from deleted)>2
raiserror (50008,16,1)
rollback transaction
go


delete from em





9.update触发器的使用方法:定义触发器trg_employ_update
使用if update语句定义一个监视特定列数据修改的触发器。
例如:监视emp表上的employeeid,当检测到employeeid被更新时,
用raiserror提示一个信息“employeeid不允许被修改”,然后回滚,取消此次操作。

use master
exec sp_addmessage 50009,16,'employeeid不允许被修改','english','false','replace'



use northwind
go
create trigger trg_employ_update
on em
for update
as
if update(employeeid)
raiserror (50009,16,1)
rollback transaction
go


update em set employeeid=employeeid+1
go
--此处提示‘无法更新标识列,在企业管理器中取消标识列后,能正常显示消息,命令成功’


10.综合:实现对订单表的管理:
接受订单库存减少被订购的数量,取消订单库存增加被订购的数量。


use northwind
go
create trigger aaaa
on od
for insert
as
update p
set UnitsInStock=UnitsInStock-inserted.Quantity
from inserted
join p
on p.productid=inserted.productid
go

use northwind
go
create trigger bbbb
on od
for delete
as
update p
set UnitsInStock=UnitsInStock+deleted.Quantity
from deleted
join p
on p.productid=deleted.productid
go 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值