--1、為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)
--2、為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'--3、為myqq資料庫編寫乙個帶引數的儲存過程proc_star,
--它可以查詢和某使用者同一星座的使用者的姓名和性別,並呼叫該儲存過程驗證其功能。
ifexists
(select
*from sysobjects where name =
'proc_star'
)drop
proc proc_star
create
procedure proc_star
@star
varchar(50
)asselect nickname 姓名,*** 性別
from users
where star in
(select star
from users
where star=
@star
)exec proc_star '雙子座'
--4、建立乙個帶引數的儲存過程proc_keshi:計算某教師授課總課時,
--並將值返回的儲存過程以及執行**。執行儲存過程:計算「郭浩」的總課時。
ifexists
(select
*from sysobjects where name =
'proc_keshi'
)drop
proc proc_keshi
create
procedure proc_keshi
@tname nvarchar(50)
asselect
sum(cclass) 總課時
from teach inner
join teacher
on teach.tno=teacher.tno
where tname=
@tname
exec proc_keshi '郭浩'
--5、teacher資料庫的teacher表中建立乙個insert 觸發器t_insert,
--當向teacher表中插入資料時,要求學號必須以「1102」開頭,否則取消插入操作,
--並提示錯誤「輸入的教師工號錯誤,請確認後重新錄入!」的警告資訊。
alter
trigger t_insert
on teacher
forinsert
asdeclare
@teacher_id
char(8
)ifleft
(@teacher_id,4
)!=1102
begin
print
'輸入的教師工號錯誤,請確認後重新錄入!'
rollback
tran
endinsert
into teacher
values
('1102011'
,'04'
,'郭浩'
,'3500'
,'編譯原理'
,'33'
)insert
into teacher
values
('1111111'
,'04'
,'郭浩'
,'3500'
,'編譯原理'
,'33'
)--一此題待修改!!!!
--6、為「學生選課資料庫」資料庫中的選課表建立乙個名為update_fenshu的update觸發器,
--該觸發器的作用是禁止更新選課表中的「分數」欄位的內容。
--並演示用update語句修改「選課」表中第一條記錄為分數改為80
--如圖:090101 100002 80
--要求顯示「不能修改分數」的警告資訊。
create
trigger update_fenshu
on xuanke
forupdate
asif
update
(result)
begin
print
'不能修改分數'
rollback
tran
endupdate xuanke
set result=
'80'
where sno=
(select
top1 sno
from xuanke)
and cno=
(select
top1 cno
from xuanke)
update xuanke
set result=
'78'
where sno=
(select
top1 sno
from xuanke)
and cno=
(select
top1 cno
from xuanke)
--7、為jieyue資料庫中的「借書記錄」
--表建立乙個名為insert_jie的insert觸發器,
--該觸發器的作用是每當借書表插入一條記錄,
--相應的「圖書」表應該減少1本該書的庫存數量。
--並用insert語句觸發事件,截圖相應結果。
create
trigger insert_jie
on borrow
forinsert
asbegin
update books
set num=num-
1where bid=
(select bid from inserted)
endinsert borrow
values
('0003'
,'bsn001'
,'2020-5-11'
,'2020-6-11'
)create
trigger insert_jie1
on borrow
forinsert
asdeclare
@bsn
varchar(50
)select
@bsn
=bid
from inserted
print
@bsn
begin
update books
set num=num-
1where bid=
@bsn
endinsert borrow
values
('0003'
,'bsn001'
,'2020-5-11'
,'2020-6-11'
)--8、為jieyue資料庫中的「還書記錄」
--表建立乙個名為insert_huan的insert觸發器,
--該觸發器的作用是每當還書表插入一條記錄,
--相應的「圖書」表應該增加1本該書的庫存數量。
--並用insert語句觸發事件,截圖相應結果。
create
trigger insert_huanon[
return
]for
insert
asbegin
update books
set num=num+
1where bid=
(select bid from inserted)
endinsert
[return
]values
('0003'
,'bsn001'
,'2020-6-10'
)
儲存過程 觸發器
觸發器主要是通過事件進行觸發而被執行的,而儲存過程可以通過儲存過程名字而被直接呼叫。當對某一表進行諸如update insert delete 這些操作時,就會自動執行觸發器所定義的sql 語句,從而確保對資料的處理必須符合由這些sql 語句所定義的規則。觸發器的主要作用就是其能夠實現由主鍵和外來鍵...
sql 觸發器 儲存過程 觸發器(3 3)
1 what?什麼是觸發器 trigger 前兩篇介紹了儲存過程,儲存過程可以理解為sql語句集。那麼觸發器就是一種特殊的儲存過程,也就是一群特殊的sql語句集。特殊在哪?從上文得知,儲存過程是依賴名字才被呼叫的。不僅是儲存過程,我們常用的方法等,大部分也是先知道名字,才能去使用。就像吃飯採用訂外賣...
儲存過程vs觸發器
編寫儲存過程與觸發器 儲存過程和觸發器是由使用者建立的 駐留在伺服器的一組transact sql查詢語句。觸發器是系統在特定條件下執行的。儲存過程能夠改善應用程式的效能。當客戶程式需要訪問資料時,一般要經過5個步驟才能訪問到資料 1 查詢語句被傳送到伺服器。2 伺服器編譯sql 3 優化產生查詢的...