--1、建立乙個觸發器,針對於teacher表,如果有人要修改教師的姓名,就輸出不能修改教師姓名
create
trigger t_updatename
on teacher --對teacher表起作用
forupdate
--觸發條件,insert,delete
asif
update
(tname)
begin
print
'不能修改教師姓名'
rollback
tran
--事物回滾
end--測試**,驗證觸發器是否有效
update teacher
set tname=
'字串'
where tno=
'0101'
select
*from teacher
where tno=
'0101'
--alter
trigger t_insert
on teacher
forinsert
as--兩張特殊的表,inserted ,deleted(隱藏),記錄剛剛插入或者刪除的記錄
declare
@tno
char(4
)--定義的區域性變數用來儲存從系統表中查出的教師的工號
select
@tno
=tno
from inserted
print
@tno
ifleft
(@tno,2
)!='11'
print
'不能插入該記錄'
rollback
tran
--測試觸發器語句
insert
into teacher
(tno,tname,ttitle)
values
('0997'
,'zifuchuan'
,'教授'
)--2、為productsales資料庫中的產品表建立乙個名為update_pno的update觸發器,
--該觸發器的作用是禁止更新產品表中的「productname」欄位的內容。
--並用update語句修改產品表中第一條記錄為:1 hp1500 印表機 2000
--要求顯示「不能修改產品名稱」的警告資訊。
create
trigger update_pno
on product
forupdate
asif
update
(productname)
begin
print
'不能修改產品名稱'
rollback
tran
end--測試觸發器
update product
set productid=
'1',productname=
'hp1500 印表機'
,price=
'2000'
where productid=
(select
top1 productid
from product)
--3、為factory資料庫中的職工表建立乙個名為update_name的update觸發器,
--該觸發器的作用是禁止更新職工表中的「姓名」欄位的內容。
--並用update語句修改職工表中工號為『2』的職工姓名為「陳晨」,
--要求顯示「不能修改職工姓名」的警告資訊。
alter
trigger update_name
on worker
forupdate
asif
update
(wname)
begin
print
'不能修改職工姓名'
rollback
tran
endupdate worker
set wname=
'陳晨'
where wno=
'2'update worker
set wname=
'孫天奇'
where wno=
'2'--4、為「學生選課資料庫」資料庫中的選課表建立乙個名為update_fenshu的update觸發器,
--該觸發器的作用是禁止更新選課表中的「分數」欄位的內容。並演示用update語句修改「選課」表中第一條記錄為分數改為80:
--要求顯示「不能修改分數」的警告資訊。
use xueshengxuanke
gocreate
trigger update_fenshu
on xuanke
forupdate
asif
update
(result)
begin
print
'不能修改分數'
rollback
transaction
enduse xueshengxuanke
goupdate xuanke
set result=
'80'
where sno=
'090101'
--5、為jieyue資料庫中的「借書記錄」 表建立乙個名為insert_jie的insert觸發器,
--該觸發器的作用是每當借書表插入一條記錄,相應的「圖書」表應該減少1本該書的庫存數量。並用insert語句觸發事件,截圖相應結果。
use jieyue
goalter
trigger insert_jie
on[dbo]
.[borrow]
forinsert
asdeclare
@bid
char(6
)select
@bid
=bid
from inserted
print
@bid
if@bidin(
select bid from books)
begin
update books set num=
(num-1)
where bid=
@bid
enduse jieyue
goinsert
into borrow
(id,bid,lenddate,returndate1)
values
('0001'
,'bsn005'
,'2009-10-10'
,'2009-12-10'
)select
*from books
select
*from borrow
delete
from borrow
where bid=
'bsn005'
update books
set num=
(num+2)
where bid=
'bsn005'
--6、為jieyue資料庫中的「還書記錄」 表建立乙個名為insert_huan的insert觸發器,
--該觸發器的作用是每當還書表插入一條記錄,相應的「圖書」表應該增加1本該書的庫存數量。並用insert語句觸發事件,截圖相應結果。
use jieyue
gocreate
trigger insert_huan
on[dbo].[
return
]for
insert
asdeclare
@bid
char(6
)select
@bid
=bid
from inserted
print
@bid
if@bidin(
select bid from books)
begin
update books set num=
(num+1)
where bid=
@bid
enduse jieyue
goinsert
into
[return
](id,bid,returndate)
values
('0001'
,'bsn005'
,'2009-12-10'
)select
*from books
select
*from
[return
]
sql 觸發器 直接遞迴觸發器
create trigger dbo loving20000 on dbo s for delete asdeclare age int select age sage from deleted delete s where sage age delete from s where sname xq...
sql 觸發器 儲存過程 觸發器(3 3)
1 what?什麼是觸發器 trigger 前兩篇介紹了儲存過程,儲存過程可以理解為sql語句集。那麼觸發器就是一種特殊的儲存過程,也就是一群特殊的sql語句集。特殊在哪?從上文得知,儲存過程是依賴名字才被呼叫的。不僅是儲存過程,我們常用的方法等,大部分也是先知道名字,才能去使用。就像吃飯採用訂外賣...
SQL之觸發器
觸發器是一種不帶引數特殊的儲存過程,有使用者定義,資料庫系統根據一定的條件自動執行 sql觸發器大體上可以分為4種 insert 觸發器 在對錶進行資料錄入的時候觸發 delete 觸發器 刪除表中的資料的時候觸發 instead of 觸發器 此類觸發器建立在檢視之上,用來替代相應的動作,比如de...