觸發器 儲存過程

2021-10-07 05:25:45 字數 4829 閱讀 6333

--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 優化產生查詢的...