觸發器的操作

觸發器的操作

本帖被 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 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章