[計(jì)算機(jī)軟件及應(yīng)用]第5章 存儲(chǔ)過程與觸發(fā)器ppt課件_第1頁
[計(jì)算機(jī)軟件及應(yīng)用]第5章 存儲(chǔ)過程與觸發(fā)器ppt課件_第2頁
[計(jì)算機(jī)軟件及應(yīng)用]第5章 存儲(chǔ)過程與觸發(fā)器ppt課件_第3頁
[計(jì)算機(jī)軟件及應(yīng)用]第5章 存儲(chǔ)過程與觸發(fā)器ppt課件_第4頁
[計(jì)算機(jī)軟件及應(yīng)用]第5章 存儲(chǔ)過程與觸發(fā)器ppt課件_第5頁
已閱讀5頁,還剩63頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、1第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器 n主要內(nèi)容主要內(nèi)容n兩個(gè)重要的數(shù)據(jù)庫對象n存儲(chǔ)過程存儲(chǔ)過程n存儲(chǔ)過程的根本概念n存儲(chǔ)過程的各種創(chuàng)立和維護(hù)方法n各種存儲(chǔ)過程的調(diào)用方法n觸發(fā)器觸發(fā)器n觸發(fā)器的根本概念n各種類型觸發(fā)器的創(chuàng)立方法n觸發(fā)器的應(yīng)用和維護(hù)12第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器n存儲(chǔ)過程存儲(chǔ)過程Stored ProcedureStored Proceduren具有一個(gè)名字、存儲(chǔ)在數(shù)據(jù)庫中、經(jīng)過預(yù)編譯的T-SQL語句集合n包含邏輯、對數(shù)據(jù)庫的查詢n支持控制流,具備過程處理才能,支持過程調(diào)用n可以獨(dú)立執(zhí)行或通過應(yīng)用程序的調(diào)用來執(zhí)行n一旦創(chuàng)立,在效勞器上即被編譯,

2、可在需要時(shí)執(zhí)行屢次n存儲(chǔ)過程的特點(diǎn)存儲(chǔ)過程的特點(diǎn) n代碼簡單化n代碼重用性n高速性n網(wǎng)絡(luò)流量小n平安性存儲(chǔ)過程23第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器n系統(tǒng)存儲(chǔ)過程系統(tǒng)存儲(chǔ)過程System Stored ProcedureSystem Stored Proceduren存儲(chǔ)在master數(shù)據(jù)庫中n以以sp_sp_為前綴為前綴n通過從系統(tǒng)表中獲取信息提供給系統(tǒng)管理員n執(zhí)行SQL Server許多管理活動(dòng)的特殊存儲(chǔ)過程n例:sp_adduser系統(tǒng)存儲(chǔ)n以以xp_xp_為前綴稱為常規(guī)擴(kuò)展存儲(chǔ)過程為前綴稱為常規(guī)擴(kuò)展存儲(chǔ)過程n為 SQL Server 與外部應(yīng)用程序之間的接口n利用他們可進(jìn)

3、展各種維護(hù)活動(dòng)n例:xp_cmdshell存儲(chǔ)過程34第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器n存儲(chǔ)過程與函數(shù)區(qū)別存儲(chǔ)過程與函數(shù)區(qū)別n存儲(chǔ)過程可以返回一個(gè)稱為返回碼的整型值,說明過程是否成功完成n而大多數(shù)函數(shù)可以返回其它值n存儲(chǔ)過程要返回其它數(shù)據(jù),包括結(jié)果集時(shí),需使用輸出參數(shù)n存儲(chǔ)過程的調(diào)用語句假設(shè)不是批處理的第一條語句,不能直接調(diào)用,必須用“EXEC 過程名參數(shù)或CALL 過程名參數(shù)的形式來調(diào)用n而函數(shù)的調(diào)用可直接使用“函數(shù)名參數(shù)的形式調(diào)用存儲(chǔ)過程45第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器n存儲(chǔ)過程的創(chuàng)立存儲(chǔ)過程的創(chuàng)立 n建立存儲(chǔ)過程來執(zhí)行表的各種操作n存儲(chǔ)過程作為數(shù)據(jù)庫的

4、對象存在數(shù)據(jù)庫中n創(chuàng)立存儲(chǔ)過程時(shí),應(yīng)指定三項(xiàng)內(nèi)容創(chuàng)立存儲(chǔ)過程時(shí),應(yīng)指定三項(xiàng)內(nèi)容n所有輸入?yún)?shù)和向調(diào)用過程或批處理返回的輸出參數(shù)n執(zhí)行數(shù)據(jù)庫操作包括調(diào)用其它過程的編程語句n返回至調(diào)用過程或批處理以說明成功或失敗以及失敗原因的狀態(tài)值返回碼 存儲(chǔ)過程56第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器n用用T-SQLT-SQL創(chuàng)立存儲(chǔ)過程創(chuàng)立存儲(chǔ)過程nCREATE PROCEDURE n , ,n OUTPUT nAS 67第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器n其中其中n:過程中的參數(shù),參數(shù)名前為號(hào)??陕暶饕粋€(gè)或多個(gè)參數(shù)。在未提供參數(shù)的默認(rèn)值時(shí),調(diào)用過程時(shí)要提供參數(shù)值n:參數(shù)的數(shù)據(jù)類型n

5、:參數(shù)的默認(rèn)值。指定默認(rèn)值后,過程執(zhí)行時(shí)用戶不必提供參數(shù)值。默認(rèn)值必須是常量或 NULL,假設(shè)使用LIKE關(guān)鍵字,那么默認(rèn)值中可以使用通配符nOUTPUT:說明該參數(shù)為返回參數(shù)。該參數(shù)值可以將信息返回給調(diào)用程序nAS:指定過程要執(zhí)行的操作n:過程中包含的T-SQL 語句 存儲(chǔ)過程78第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器n例例5-15-1:創(chuàng)立第一個(gè)存儲(chǔ)過程:創(chuàng)立第一個(gè)存儲(chǔ)過程存儲(chǔ)過程- 建立第一個(gè)存儲(chǔ)過程,查詢學(xué)生人數(shù)USE 學(xué)生學(xué)籍?dāng)?shù)據(jù)庫GO - 判斷存儲(chǔ)過程是否存在,假設(shè)存在先刪除它IF EXISTS SELECT name FROM sysobjects WHERE name

6、 =MyFirstSPAND type=P DROP PROCEDURE MyFirstSPGO CREATE PROCEDURE MyFirstSP AS DECLARE Con INT SELECT Con=COUNT* FROM 學(xué)生根本信息 PRINT Con SELECT * FROM 學(xué)生根本信息GO- 執(zhí)行存儲(chǔ)過程EXEC MyFirstSP89第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器nsysobjectssysobjects表表typetype字段的取值字段的取值 值值含義含義值值含義含義CCHECK約束R規(guī)那么D默認(rèn)值或DEFAULT約束S系統(tǒng)表FFOREIGN KE

7、Y約束TF表函數(shù)FN標(biāo)量函數(shù)TR觸發(fā)器IF內(nèi)嵌表函數(shù)U用戶表KPRIMARY KEY或UNIQUE約束V視圖P存儲(chǔ)過程X擴(kuò)展存儲(chǔ)過程存儲(chǔ)過程910第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器n例例5-25-2:創(chuàng)立帶參數(shù)的存儲(chǔ)過程:創(chuàng)立帶參數(shù)的存儲(chǔ)過程n存儲(chǔ)過程通過其參數(shù)與調(diào)用程序進(jìn)展通訊n每個(gè)參數(shù)都有名稱、數(shù)據(jù)類型、方向和默認(rèn)值n當(dāng)程序執(zhí)行存儲(chǔ)過程時(shí),通過輸入?yún)?shù)將數(shù)據(jù)傳遞給存儲(chǔ)過程,通過OUTPUT參數(shù)將數(shù)據(jù)返回至調(diào)用程序存儲(chǔ)過程- 建立存儲(chǔ)過程,按照性別查詢學(xué)生的姓名USE 學(xué)生學(xué)籍?dāng)?shù)據(jù)庫GO IF EXISTS SELECT name FROM sysobjects WHERE n

8、ame =FindSexAND type=P DROP PROCEDURE FindSexGO - 創(chuàng)立過程,輸入?yún)?shù)為學(xué)生性別,得到該性別的學(xué)生姓名CREATE PROCEDURE FindSexStuSex CHAR2AS SELECT S.姓名 FROM 學(xué)生根本信息 AS S WHERE S.性別 = StuSexGO- 執(zhí)行過程,得到男同學(xué)的姓名DECLARE MS INTEXEC FindSex 男1011第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器n例例5-35-3:創(chuàng)立帶:創(chuàng)立帶OUTPUTOUTPUT參數(shù)的存儲(chǔ)過程參數(shù)的存儲(chǔ)過程存儲(chǔ)過程- 求男同學(xué)的總?cè)藬?shù)USE 學(xué)生學(xué)籍

9、數(shù)據(jù)庫GOIF EXISTSSELECT name FROM sysobjects WHERE name =GetMaleCount AND type=P DROP PROCEDURE GetMaleCountGO- 創(chuàng)立過程,求男同學(xué)的總?cè)藬?shù)CREATE PROCEDURE GetMaleCount MS INT OUTPUT AS SELECT MS = COUNT* FROM 學(xué)生根本信息 AS S WHERE S.性別 = 男GO- 執(zhí)行過程,得到學(xué)生的總?cè)藬?shù)DECLARE MS INTEXEC GetMaleCount MS OUTPUTPRINT 男同學(xué)總?cè)藬?shù)為:+ CASTMS

10、AS CHAR結(jié)果為:結(jié)果為: 男同學(xué)的總?cè)藬?shù)為:71112第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器n例例5-45-4:創(chuàng)立帶返回值的存儲(chǔ)過程:創(chuàng)立帶返回值的存儲(chǔ)過程n在存儲(chǔ)過程中使用 RETURN 語句,可將一個(gè)返回值返回給調(diào)用程序n假設(shè)RETURN 未指定值,那么存儲(chǔ)過程返回 0nRETURN 語句可無條件地終止存儲(chǔ)過程,其后的語句將不會(huì)被執(zhí)行。n返回值表示執(zhí)行成功0或失敗非0存儲(chǔ)過程- 按照學(xué)號(hào)查詢該學(xué)生姓名- 創(chuàng)立過程,輸入?yún)?shù)為學(xué)生學(xué)號(hào),返回碼為該學(xué)生是否存在CREATE PROCEDURE GetName StuNO INT AS DECLARE ErrorSave INT

11、 -聲明變量ErrorSave用于存儲(chǔ)返回碼 SET ErrorSave = 0 SELECT S.姓名 FROM 學(xué)生根本信息 AS S WHERE S.學(xué)號(hào) = StuNO IF ERROR 0 - ERROR值存儲(chǔ)于ErrorSave SET ErrorSave = ERROR RETURN ErrorSave -假設(shè)SELECT語句未出現(xiàn)錯(cuò)誤,返回0,否那么返回錯(cuò)誤號(hào)GO1213第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器n結(jié)果為結(jié)果為n在“網(wǎng)格窗格中顯示該學(xué)生的姓名為“齊霖n在“消息窗格中顯示“返回碼為: 0存儲(chǔ)過程- 執(zhí)行過程,得到該學(xué)號(hào)的學(xué)生姓名及存儲(chǔ)過程返回值DECLARE

12、 ReturnStatus INTEXECUTE ReturnStatus = GetName 02002- 顯示返回值PRINT 返回碼為: + CASTReturnStatus AS CHAR10GO1314第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器n例例5-55-5:創(chuàng)立根據(jù)返回情況的不同而返回不同返回碼的存儲(chǔ)過程:創(chuàng)立根據(jù)返回情況的不同而返回不同返回碼的存儲(chǔ)過程n創(chuàng)立一個(gè)根據(jù)其姓名獲得其家庭地址的存儲(chǔ)過程n該過程中各種返回情況的返回碼值如表所示值值含義含義0成功執(zhí)行1未指定所需的參數(shù)值2指定的參數(shù)值無效3獲得地址值時(shí)出現(xiàn)錯(cuò)誤4發(fā)現(xiàn)地址值為NULL存儲(chǔ)過程1415第第5 5章章 存

13、儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程-按照學(xué)生姓名查詢該學(xué)生的家庭地址-創(chuàng)立過程,輸入?yún)?shù)為學(xué)生姓名,得到其家庭地址,返回碼表示各種返回情況CREATE PROCEDURE GetAddress StuName varchar20 = NULLAS DECLARE StuAddress VARCHAR50 IF StuName IS NULL - 判斷是否未提供姓名參數(shù) BEGIN PRINT 錯(cuò)誤:請?zhí)峁W(xué)生的姓名! RETURN1 END ELSE BEGIN - 判斷該學(xué)生是否存在 IF SELECT COUNT* FROM 學(xué)生根本信息 AS S WHERE S.姓名 = StuNa

14、me = 0 BEGIN PRINT 提示:該學(xué)生名字有誤,或該學(xué)生不存在! RETURN2 END1516第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器n續(xù)前頁代碼續(xù)前頁代碼存儲(chǔ)過程 - 查詢該學(xué)生的家庭地址,賦給輸出參數(shù) StuAddress SELECT StuAddress=家庭地址 FROM 學(xué)生根本信息 AS S WHERE S.姓名 =StuName - 判斷查詢中是否存在問題 IF ERROR 0 BEGIN PRINT 提示:查詢過程中出錯(cuò)! RETURN3 END ELSE - 判斷該學(xué)生的家庭地址是否為NULL IF StuAddress IS NULL BEGIN P

15、RINT 提示:該學(xué)生家庭地址為空! RETURN4 END -成功查詢出該學(xué)生的家庭地址! ELSE BEGIN PRINT 查詢成功! RETURN0 END ENDGO1617第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器n執(zhí)行語句假設(shè)為執(zhí)行語句假設(shè)為nEXEC GetAddress,那么在“消息格中顯示“錯(cuò)誤:請?zhí)峁W(xué)生的姓名!n執(zhí)行語句假設(shè)為執(zhí)行語句假設(shè)為:nDECLARE returnval intnEXEC returnval=GetAddress 高得非nprint returnvaln那么在那么在“消息消息窗格中顯示窗格中顯示n提示:該學(xué)生家庭地址為空!n4n執(zhí)行語句假設(shè)為

16、執(zhí)行語句假設(shè)為nDECLARE returnval intnEXEC returnval=GetAddress 張軍nprint returnvaln那么在那么在“消息消息窗格中顯示窗格中顯示n查詢成功!n0存儲(chǔ)過程1718第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器n例例5-65-6:使用:使用LIKELIKE、通配符和參數(shù)默認(rèn)值的存儲(chǔ)過程、通配符和參數(shù)默認(rèn)值的存儲(chǔ)過程存儲(chǔ)過程-求“龍姓學(xué)生的根本情況USE 學(xué)生學(xué)籍?dāng)?shù)據(jù)庫GOIF EXISTSSELECT name FROM sysobjects WHERE name =GetStuInfoAND type=P DROP PROCEDU

17、RE GetStuInfoGO- 創(chuàng)立過程,返回“龍姓學(xué)生的家庭地址CREATE PROCEDURE GetStuInfo SNAME VARCHAR20 = 龍% AS SELECT S.* FROM 學(xué)生根本信息 AS S WHERE S.姓名 LIKE SNAMEGO- 執(zhí)行過程,得到“龍姓學(xué)生的根本情況EXEC GetStuInfoGO 1819第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器n例例5-75-7:使用參數(shù)默認(rèn)值:使用參數(shù)默認(rèn)值NULLNULL創(chuàng)立存儲(chǔ)過程創(chuàng)立存儲(chǔ)過程n將參數(shù)默認(rèn)值指定為NULL值,來判斷存儲(chǔ)過程調(diào)用時(shí),用戶是否提供參數(shù)值存儲(chǔ)過程- 求某學(xué)生的出生日期-

18、創(chuàng)立過程,輸入某學(xué)生的姓名,得到該學(xué)生的出生日期。- 當(dāng)未輸入學(xué)生姓名時(shí),顯示“請輸入學(xué)生的姓名!CREATE PROCEDURE GetStuBirth SNAME VARCHAR20 = NULLAS IF SNAME IS NULL PRINT 請輸入學(xué)生的姓名! ELSE SELECT S.姓名, S. 出生日期 FROM 學(xué)生根本信息 AS S WHERE S.姓名= SNAMEGO- 執(zhí)行過程USE 學(xué)生學(xué)籍?dāng)?shù)據(jù)庫EXEC GetStuBirth- 未提供參數(shù)時(shí),會(huì)顯示:請輸入學(xué)生的姓名!GOEXEC GetStuBirth 張軍1920第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸

19、發(fā)器n使用企業(yè)管理器創(chuàng)立存儲(chǔ)過程使用企業(yè)管理器創(chuàng)立存儲(chǔ)過程存儲(chǔ)過程2021第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器n使用企業(yè)管理器的使用企業(yè)管理器的“創(chuàng)立存儲(chǔ)過程向?qū)?chuàng)立存儲(chǔ)過程向?qū)?chuàng)立存儲(chǔ)過程創(chuàng)立存儲(chǔ)過程存儲(chǔ)過程2122第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程2223第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器n執(zhí)行存儲(chǔ)過程執(zhí)行存儲(chǔ)過程 nEXECUTE n= ,= ,| OUTPUT|DEFAULTn其中其中n:過程中參數(shù)的值n:用來保存參數(shù)或者返回參數(shù)的變量nOUTPUT:指定存儲(chǔ)過程必須返回一個(gè)參數(shù)nDEFAULT:根據(jù)過程的定義,提供參數(shù)的默認(rèn)值存儲(chǔ)過程2

20、324第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器n修改存儲(chǔ)過程修改存儲(chǔ)過程n使用企業(yè)管理器修改和重命名存儲(chǔ)過程n使用ALTER PROCEDURE更改存儲(chǔ)過程n可以刪除重建n可以在原有存儲(chǔ)過程根底上修改存儲(chǔ)過程2425第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器n例例5-145-14:檢索所有學(xué)分為:檢索所有學(xué)分為4 4的課程,修改該過程為檢索所有學(xué)分為的課程,修改該過程為檢索所有學(xué)分為3 3的課程的課程USE 學(xué)生學(xué)籍?dāng)?shù)據(jù)庫GOIF EXISTSSELECT name FROM sysobjects WHERE name=GetCreditAND type = P DROP PRO

21、CEDURE GetCreditGOUSE 學(xué)生學(xué)籍?dāng)?shù)據(jù)庫GOCREATE PROCEDURE GetCreditAS SELECT * FROM 課程根本信息 WHERE 學(xué)分 = 4GO- 修改該存儲(chǔ)過程ALTER PROCEDURE GetCreditAS SELECT * FROM 課程根本信息 WHERE 學(xué)分 = 3GO2526第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器n觸發(fā)器觸發(fā)器 n觸發(fā)器Trigger是一種特殊類型的存儲(chǔ)過程,用戶或應(yīng)用程序不直接調(diào)用執(zhí)行它,而是在手工或通過應(yīng)用程序?qū)Ρ砘蛞晥D進(jìn)展插入、刪除和更新操作n執(zhí)行UPDATE、INSERT 或 DELETE命令時(shí)

22、自動(dòng)執(zhí)行n主要功能是維護(hù)表中數(shù)據(jù)的完好性,檢查對表所做的修改是否允許或進(jìn)展一些特殊的自動(dòng)化操作n一個(gè)表或視圖可以有多個(gè)觸發(fā)器觸發(fā)器2627第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器n觸發(fā)器的創(chuàng)立觸發(fā)器的創(chuàng)立n使用企業(yè)管理器創(chuàng)立觸發(fā)器2728第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器n使用使用T-SQLT-SQL創(chuàng)立觸發(fā)器創(chuàng)立觸發(fā)器nCREATE TRIGGER ON | n FOR|AFTER|INSTEAD OF DELETE,INSERT,UPDATEnASnn其中其中n | :在其上執(zhí)行觸發(fā)器的表或視圖,稱為觸發(fā)器表或視圖nFOR子句指定觸發(fā)器的執(zhí)行時(shí)間nAFTER:觸發(fā)器在

23、SQL語句中的所有操作成功執(zhí)行后以及所有引用級(jí)聯(lián)操作和約束檢查成功完成后激活n假如僅指定 FOR 關(guān)鍵字,那么 AFTER 是默認(rèn)設(shè)置nINSTEAD OF:用觸發(fā)器中的操作替代觸發(fā)語句的操作觸發(fā)器2829第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器n DELETE , INSERT , UPDATE n在表或視圖上執(zhí)行相應(yīng)修改語句時(shí)激活觸發(fā)器n至少需指定一項(xiàng)n指定多項(xiàng)時(shí)用逗號(hào)分隔,順序任意nAS:觸發(fā)器要執(zhí)行的操作nn觸發(fā)器的條件和操作觸發(fā)器2930第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器n例例5-175-17:當(dāng)試圖在:當(dāng)試圖在“學(xué)生根本信息學(xué)生根本信息表中刪除或更改數(shù)據(jù)時(shí),顯

24、示表中刪除或更改數(shù)據(jù)時(shí),顯示警告消息。警告消息。觸發(fā)器USE 學(xué)生學(xué)籍?dāng)?shù)據(jù)庫IF EXISTS SELECT name FROM sysobjects WHERE name = StuInfoChangeRem AND type = TR DROP TRIGGER StuInfoChangeRemGOCREATE TRIGGER StuInfoChangeRem ON 學(xué)生根本信息FOR UPDATE,DELETEAS RAISERROR 50001, 16, 10GO3031第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器n上例中使用的上例中使用的5000150001號(hào)消息的定義號(hào)消息的定義

25、nEXEC sp_addmessage 50001,16, 注意:學(xué)生根本信息表正在被試圖修改或刪除!,us_Englishnsp_addmessagesp_addmessagensp_addmessage , ,replacen其中其中n:用戶定義的錯(cuò)誤信息號(hào)從 50001 開場,且必須唯一n:有效級(jí)別為1到25,19到25為系統(tǒng)管理員使用的嚴(yán)重級(jí)別n:錯(cuò)誤信息的文本n:消息的語言。默認(rèn)為會(huì)話的默認(rèn)語言,在可以以其它語言添加消息之前,消息的美語版us_english必須已經(jīng)存在nreplace:假設(shè)指定REPLACE,那么可改寫原定義消息文本和嚴(yán)重級(jí)別觸發(fā)器3132第第5 5章章 存儲(chǔ)過程與

26、觸發(fā)器存儲(chǔ)過程與觸發(fā)器n50001號(hào)消息定義添加完成后,可在觸發(fā)器中使用RAISERROR命令nRAISERRORRAISERROR命令的作用命令的作用n使當(dāng)觸發(fā)條件滿足時(shí),顯示消息或返回消息給客戶應(yīng)用程序nRAISERRORRAISERROR語句的語法格式語句的語法格式nRAISERROR |,,n其中其中n:sysmessages表中用戶定義的消息的id號(hào)n:一條帶格式控制的特殊消息,格式與C語言中的prinf函數(shù)的格式相似n:同sp_addmessagen:1到127的整數(shù),表示有關(guān)錯(cuò)誤調(diào)用狀態(tài)的信息,默認(rèn)值為1n:替代在中定義的變量或參數(shù)??梢杂?或不超過20個(gè)的替代參數(shù),每個(gè)替代參數(shù)

27、可以是部分變量 觸發(fā)器3233第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器n觸發(fā)器觸發(fā)器StuInfoChangeRemStuInfoChangeRem的測試過程的測試過程n將“學(xué)生根本信息表中“張軍同學(xué)的“家庭地址改為“豐臺(tái)區(qū)那么激活觸發(fā)器n執(zhí)行“RAISERROR 50001, 16, 10語句,顯示提醒信息觸發(fā)器3334第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器ndeleteddeleted和和insertedinserted表表nCREATE TRIGGER 語句中使用的兩個(gè)特殊表n由SQL Server自動(dòng)創(chuàng)立和管理的邏輯概念表n這些表臨時(shí)駐留于內(nèi)存中,在構(gòu)造上類似于觸發(fā)器

28、表,保存著用戶操作可能更改的行的舊值或新值n觸發(fā)器使用deleted和inserted表來檢查數(shù)據(jù)修改的效果以及設(shè)置觸發(fā)器操作的條件觸發(fā)器3435第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器ndeleted deleted 表表nDeleted表保存了DELETE和UPDATE語句所影響的行的復(fù)本n在執(zhí)行DELETE或UPDATE語句時(shí),行從觸發(fā)器表中刪除,并傳輸?shù)?deleted表中nDeleted表和觸發(fā)器表通常沒有一樣的行nInsertedInserted表表nInserted表保存了INSERT和UPDATE語句所影響的行的復(fù)本n在一個(gè)插入或更新事務(wù)處理中,新建行被同時(shí)添加到ins

29、erted表和觸發(fā)器表中n更新事務(wù)類似于在刪除之后執(zhí)行插入n首先舊行被復(fù)制到 deleted 表中n然后新行被復(fù)制到觸發(fā)器表和inserted表中3536第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器n在觸發(fā)器中使用在觸發(fā)器中使用inserted inserted 和和 deleted deleted 表表n例5-19:創(chuàng)立使用inserted表的觸發(fā)器觸發(fā)器- 創(chuàng)立觸發(fā)器,當(dāng)向“學(xué)生根本信息表中插入數(shù)據(jù)時(shí),將插入的數(shù)據(jù)按插入時(shí)間保存在另一個(gè)表中CREATE TRIGGER SaveStuInfo_InsON 學(xué)生根本信息FOR INSERTAS INSERT Ins_SaveStuInfo

30、 SELECT * ,getdate FROM inserted3637第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器n測試測試 SaveStuInfo_ InsSaveStuInfo_ Ins觸發(fā)器觸發(fā)器n新建一個(gè)構(gòu)造與“學(xué)生根本信息表一樣的空白表Ins_SaveStuInfon新添加一列為“記錄插入時(shí)間的datetime類型的字段,用于新記錄的插入時(shí)間n執(zhí)行觸發(fā)器創(chuàng)立語句,創(chuàng)立觸發(fā)器n執(zhí)行如下語句,在“學(xué)生根本信息表中插入一條新記錄insert into 學(xué)生根本信息學(xué)號(hào),姓名,性別values08888,新1,女n執(zhí)行如下語句,查看從inserted表中插入到Ins_SaveStuIn

31、fo表中的數(shù)據(jù)select * from Ins_SaveStuInfo查詢結(jié)果3738第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器n例5-20:創(chuàng)立使用deleted表的觸發(fā)器觸發(fā)器-創(chuàng)立觸發(fā)器,在刪除“學(xué)生根本信息表的數(shù)據(jù)時(shí),將刪除的數(shù)據(jù)保存在另一個(gè)表中CREATE TRIGGER SaveStuInfo_DelON 學(xué)生根本信息FOR DELETEAS INSERT Del_SaveStuInfo SELECT * FROM deleted3839第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器n測試測試SaveStuInfo_DelSaveStuInfo_Del觸發(fā)器觸發(fā)器n在“學(xué)

32、生根本信息表中添加一條記錄“09999,姍姍,女,漢族,團(tuán)員n新建一個(gè)構(gòu)造與“學(xué)生根本信息表一樣的空白表Del_SaveStuInfon執(zhí)行觸發(fā)器創(chuàng)立語句,創(chuàng)立觸發(fā)器n執(zhí)行如下語句,從“學(xué)生根本信息表中刪除新添加的記錄DELETE FROM 學(xué)生根本信息WHERE 學(xué)號(hào)=09999n執(zhí)行如下語句,查看從deleted表中插入到Del_SaveStuInfo表中的數(shù)據(jù)select * from Del_SaveStuInfo查詢結(jié)果3940第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器n觸發(fā)器的應(yīng)用與維護(hù)觸發(fā)器的應(yīng)用與維護(hù) nAFTERAFTER觸發(fā)器的應(yīng)用觸發(fā)器的應(yīng)用n觸發(fā)器可以實(shí)現(xiàn)比CHE

33、CK約束更為復(fù)雜的約束,可以引用其它表中的列n一個(gè)表可以具備多個(gè)同類觸發(fā)器INSERT、UPDATE 或 DELETE,對同一個(gè)修改語句可采取多個(gè)不同的對策來響應(yīng)n約束只能提示系統(tǒng)錯(cuò)誤信息,而使用觸發(fā)器可以提供自定義錯(cuò)誤信息和處理n假設(shè)觸發(fā)器表有約束,那么在AFTER 觸發(fā)器執(zhí)行前檢查這些約束。假設(shè)約束被破壞,那么不執(zhí)行 AFTER 觸發(fā)器 觸發(fā)器4041第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器n例例5-215-21:利用觸發(fā)器定義:利用觸發(fā)器定義“課程根本信息課程根本信息和和“學(xué)生成績學(xué)生成績表表之間的完好性約束。當(dāng)插入或更新學(xué)生成績時(shí),觸發(fā)器檢查該之間的完好性約束。當(dāng)插入或更新學(xué)生

34、成績時(shí),觸發(fā)器檢查該課程是否為課程是否為“考察考察課,假設(shè)是,那么通過的成績只能以課,假設(shè)是,那么通過的成績只能以6060分分計(jì),未通過的成績以計(jì),未通過的成績以2020分計(jì)。分計(jì)。觸發(fā)器USE 學(xué)生學(xué)籍?dāng)?shù)據(jù)庫IF EXISTS SELECT name FROM sysobjects WHERE name = ScoreCheck AND type = TR DROP TRIGGER ScoreCheckGOCREATE TRIGGER ScoreCheck ON 學(xué)生成績 FOR INSERT, UPDATEAS DECLARE 成績 smallint, 考核方式 varchar8,課程名

35、varchar20 SELECT 成績 = i.成績, 考核方式 = c.考核方式, 課程名 = c.課程名 FROM 學(xué)生成績 sc INNER JOIN inserted i ON sc.學(xué)號(hào) = i.學(xué)號(hào) JOIN 課程根本信息 c ON c. 課程號(hào)= i. 課程號(hào)4142第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器觸發(fā)器IF 考核方式= 考察 and 成績 60 AND 成績20 BEGIN RAISERROR 課程 %s為考察課,成績以60或20計(jì)!, 16, 1, 課程名 ROLLBACK TRANSACTION ENDn續(xù)前頁代碼4243第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)

36、過程與觸發(fā)器n觸發(fā)器觸發(fā)器ScoreCheckScoreCheck的測試的測試n在“學(xué)生成績表中添加一條記錄“01001,06,78n其中課程號(hào)為“06的課程為考察課,那么激活觸發(fā)器的觸發(fā)條件“FOR INSERT,顯示錯(cuò)誤信息4344第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器n例例5-225-22:定義觸發(fā)器,在插入記錄或修改記錄時(shí),實(shí)現(xiàn):定義觸發(fā)器,在插入記錄或修改記錄時(shí),實(shí)現(xiàn)“考考勤表勤表與與“學(xué)生根本信息學(xué)生根本信息表之間的完好性約束。表之間的完好性約束。觸發(fā)器USE 學(xué)生學(xué)籍?dāng)?shù)據(jù)庫IF EXISTS SELECT name FROM sysobjects WHERE name

37、= InsertAttenCheck AND type = TR DROP TRIGGER InsertAttenCheckGO- 實(shí)現(xiàn)“考勤表與“學(xué)生根本信息表之間的完好性約束,即檢查考勤表中的新插入- 或修改的學(xué)號(hào)是否合法CREATE TRIGGER InsertAttenCheck ON 考勤表 FOR INSERT, UPDATEAS DECLARE StuNo VARCHAR10,Ins_StuNo VARCHAR10 SELECT StuNo = S.學(xué)號(hào) FROM 學(xué)生根本信息 S, inserted i WHERE S.學(xué)號(hào) = i.學(xué)號(hào)4445第第5 5章章 存儲(chǔ)過程與觸發(fā)器

38、存儲(chǔ)過程與觸發(fā)器n續(xù)前頁代碼觸發(fā)器 IF StuNo IS NULL -假設(shè)得到的學(xué)號(hào)為空,表示在考勤表中插入的學(xué)號(hào)非法,回滾 BEGIN - 獲得要插入記錄中的學(xué)號(hào) SELECT Ins_StuNo = i.學(xué)號(hào) FROM inserted i RAISERROR 學(xué)號(hào)為 %s 的學(xué)生不存在!,16,1,Ins_StuNo ROLLBACK TRANSACTION ENDGO4546第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器n觸發(fā)器觸發(fā)器InsertAttenCheckInsertAttenCheck的測試的測試n在“考勤表中添加一條記錄“09876,04,10n其中學(xué)號(hào)為“09876

39、的學(xué)生不存在,會(huì)激活觸發(fā)器的觸發(fā)條件“FOR INSERT,從而顯示錯(cuò)誤信息 4647第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器n例例5-235-23:定義刪除型觸發(fā)器,當(dāng)對:定義刪除型觸發(fā)器,當(dāng)對“學(xué)生根本信息學(xué)生根本信息表進(jìn)展刪表進(jìn)展刪除操作時(shí)先檢查要?jiǎng)h除的行數(shù),刪除多行時(shí)報(bào)錯(cuò)。除操作時(shí)先檢查要?jiǎng)h除的行數(shù),刪除多行時(shí)報(bào)錯(cuò)。觸發(fā)器USE 學(xué)生學(xué)籍?dāng)?shù)據(jù)庫IF EXISTS SELECT name FROM sysobjects WHERE name = DelStuNumCheck AND type = TR DROP TRIGGER DelStuNumCheckGOCREATE TRI

40、GGER DelStuNumCheck ON 學(xué)生根本信息FOR DELETEAS IF ROWCOUNT 1 BEGIN ROLLBACK TRANSACTION RAISERROR 請一次刪除一行信息!,16,1 ENDGO4748第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器n觸發(fā)器觸發(fā)器DelStuNumCheckDelStuNumCheck的測試的測試n在“學(xué)生根本信息表中先添加2條記錄“11111,刪1“22222,刪2觸發(fā)器刪除記錄個(gè)數(shù)大于1,激活觸發(fā)器,顯示錯(cuò)誤信息,回滾刪除事務(wù),“學(xué)生根本信息表中的記錄未被刪除4849第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器刪除記錄

41、個(gè)數(shù)不大于1,不會(huì)激活觸發(fā)器,不顯示錯(cuò)誤信息,刪除事務(wù)正常執(zhí)行, “學(xué)生根本信息表中的記錄確被刪除4950第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器nINSTEAD OFINSTEAD OF觸發(fā)器的應(yīng)用觸發(fā)器的應(yīng)用n主要作用為可以通過觸發(fā)器更新那些不能直接更新的視圖n如一些涉及多個(gè)根本表的視圖不能直接進(jìn)展插入、刪除或更新操作,可使用INSTEAD OF觸發(fā)器來完成觸發(fā)器5051第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器n例例5-245-24:定義:定義INSTEAD OFINSTEAD OF觸發(fā)器,用它更新視圖中涉及的兩個(gè)根本表觸發(fā)器,用它更新視圖中涉及的兩個(gè)根本表n創(chuàng)立兩個(gè)根本表

42、,分別將學(xué)生的個(gè)人信息和其準(zhǔn)考證信息分開CREATE TABLE 學(xué)生信息 學(xué)號(hào) char5 PRIMARY KEY,姓名 varchar20,性別 char2,年齡 smallint,家庭地址 varchar100,專業(yè)名 char50,系名 char50CREATE TABLE 準(zhǔn)考證信息 準(zhǔn)考證號(hào) char50 PRIMARY KEY,學(xué)號(hào) char5,姓名 varchar20,考區(qū)地址 varchar100,CONSTRAINT FK_學(xué)生_準(zhǔn)考證 FOREIGN KEY學(xué)號(hào) REFERENCES 學(xué)生信息學(xué)號(hào)5152第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器n創(chuàng)立基于上述兩個(gè)根

43、本表的一個(gè)視圖,包含學(xué)生在兩個(gè)表中的詳細(xì)信息觸發(fā)器CREATE VIEW 學(xué)生詳細(xì)信息AS SELECT S. 學(xué)號(hào),S.姓名,S.性別,S.年齡,S.家庭地址,S.專業(yè)名,S.系名,P.準(zhǔn)考 證號(hào),P.考區(qū)地址 FROM 學(xué)生信息 S,準(zhǔn)考證信息 P WHERE S.學(xué)號(hào) = P.學(xué)號(hào)5253第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器n建立兩個(gè)根本表和一個(gè)視圖后,假設(shè)想通過視圖向根本表中插入數(shù)據(jù),那么因視圖涉及多個(gè)表,SQL Server不允許插入不允許在視圖中執(zhí)行插入操作5354第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器n創(chuàng)立視圖上的INSTEAD OF觸發(fā)器,以便通過它在一個(gè)

44、視圖涉及的兩個(gè)根本表中插入記錄觸發(fā)器USE 學(xué)生學(xué)籍?dāng)?shù)據(jù)庫-在視圖上創(chuàng)立觸發(fā)器,使可以通過試圖將記錄插入到其涉及的多個(gè)根本表中CREATE TRIGGER InsStuDetailInfo ON 學(xué)生詳細(xì)信息INSTEAD OF INSERTAS INSERT INTO 學(xué)生信息 - 將記錄插入“學(xué)生信息根本表中 SELECT 學(xué)號(hào),姓名,性別,年齡,家庭地址,專業(yè)名,系名 FROM inserted INSERT INTO 準(zhǔn)考證信息 - 將記錄插入“準(zhǔn)考證信息根本表中 SELECT 準(zhǔn)考證號(hào),學(xué)號(hào),姓名,考區(qū)地址 FROM insertedGO5455第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過

45、程與觸發(fā)器n在視圖“學(xué)生詳細(xì)信息上創(chuàng)立觸發(fā)器后,再執(zhí)行插入語句,結(jié)果為成功將該記錄分別插入到根本表“學(xué)生信息和“準(zhǔn)考證信息中,完成通過涉及多表的視圖對這多個(gè)表進(jìn)展插入的操作插入操作成功執(zhí)行5556第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器nAFTERAFTER觸發(fā)器和觸發(fā)器和INSTEAD OFINSTEAD OF觸發(fā)器的比較觸發(fā)器的比較nAFTER AFTER 觸發(fā)器與觸發(fā)器與INSTEAD OFINSTEAD OF觸發(fā)器在適用范圍上不同觸發(fā)器在適用范圍上不同nAFTER 觸發(fā)器只能建立在表上n而INSTEAD OF觸發(fā)器可建立在表或視圖上nAFTER AFTER 觸發(fā)器與觸發(fā)器與IN

46、STEAD OFINSTEAD OF觸發(fā)器在允許的觸發(fā)器個(gè)數(shù)上不同觸發(fā)器在允許的觸發(fā)器個(gè)數(shù)上不同n在每個(gè)表的每個(gè)觸發(fā)操作上都可建立多個(gè)AFTER 觸發(fā)器n而在表或視圖上的每個(gè)觸發(fā)操作只能建立一個(gè)INSTEAD OF觸發(fā)器。nAFTER AFTER 觸發(fā)器與觸發(fā)器與INSTEAD OFINSTEAD OF觸發(fā)器在執(zhí)行時(shí)間上不同觸發(fā)器在執(zhí)行時(shí)間上不同nAFTER 觸發(fā)器在所有約束處理、級(jí)聯(lián)引用操作和inserted和deleted表創(chuàng)立之后才產(chǎn)生觸發(fā)動(dòng)作n而INSTEAD OF觸發(fā)器在所有約束處理之前、inserted和deleted表創(chuàng)立之后產(chǎn)生觸發(fā)動(dòng)作nAFTER AFTER 觸發(fā)器與觸發(fā)器與

47、INSTEAD OFINSTEAD OF觸發(fā)器在產(chǎn)生的觸發(fā)動(dòng)作上不同觸發(fā)器在產(chǎn)生的觸發(fā)動(dòng)作上不同nAFTER 觸發(fā)器在激活時(shí)進(jìn)展規(guī)那么檢查,決定是否允許該操作的實(shí)現(xiàn)n而INSTEAD OF觸發(fā)器在激活時(shí)是將其中定義的觸發(fā)動(dòng)作替代對觸發(fā)器表或視圖進(jìn)展的UPDATE、DELETE和INSERT操作 觸發(fā)器5657第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器n修改觸發(fā)器修改觸發(fā)器n使用企業(yè)管理器修改觸發(fā)器使用企業(yè)管理器修改觸發(fā)器n使用使用ALTER TRIGGERALTER TRIGGER修改觸發(fā)器修改觸發(fā)器nALTER TRIGGER ON | FOR|AFTER|INSTEAD OFDELE

48、TE,INSERT,UPDATEnASn n觸發(fā)器5758第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器n例例5-275-27:修改:修改StuInfoChangeRemStuInfoChangeRem觸發(fā)器觸發(fā)器觸發(fā)器-使用 ALTER TRIGGER 語句修改觸發(fā)器,使之僅對INSERT操作有效USE 學(xué)生學(xué)籍?dāng)?shù)據(jù)庫GOALTER TRIGGER StuInfoChangeRem ON 學(xué)生根本信息FOR INSERTAS RAISERROR 50010, 16, 10 - 定義消息50010的語句為:sp_addmessage 50010,16,注意:正試圖將記錄插入學(xué)生根本信息表!,

49、us_english5859第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器n刪除觸發(fā)器刪除觸發(fā)器n使用企業(yè)管理器刪除觸發(fā)器使用企業(yè)管理器刪除觸發(fā)器n使用使用DROP TRIGGERDROP TRIGGER刪除觸發(fā)器刪除觸發(fā)器nDROP TRIGGER 觸發(fā)器名n從當(dāng)前數(shù)據(jù)庫中刪除一個(gè)或多個(gè)觸發(fā)器 n刪除觸發(fā)器時(shí),其所基于的表和數(shù)據(jù)不受影響n刪除表時(shí),所有與表關(guān)聯(lián)的觸發(fā)器也被刪除n刪除觸發(fā)器時(shí),sysobjects 和 syscomments 系統(tǒng)表中的觸發(fā)器信息也被刪除n默認(rèn)情況下,DROP TRIGGER 權(quán)限為觸發(fā)器表所有者,且不可轉(zhuǎn)讓觸發(fā)器5960第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過

50、程與觸發(fā)器n實(shí)例實(shí)例- -使用了存儲(chǔ)過程和觸發(fā)器的學(xué)生學(xué)籍?dāng)?shù)據(jù)庫使用了存儲(chǔ)過程和觸發(fā)器的學(xué)生學(xué)籍?dāng)?shù)據(jù)庫 n目的目的n學(xué)生學(xué)籍?dāng)?shù)據(jù)庫包含五個(gè)根本表和一個(gè)視圖,在其上參加的存儲(chǔ)過程和觸發(fā)器,實(shí)現(xiàn)數(shù)據(jù)的操作和完好性控制。6061第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器學(xué)生基本信息表存儲(chǔ)過程創(chuàng)立表查詢學(xué)生人數(shù)例5.1按性別查詢學(xué)生姓名例5.2求不同性別學(xué)生人數(shù)例5.3按學(xué)號(hào)查詢學(xué)生姓名例5.4按學(xué)生姓名查詢學(xué)生家庭地址例5.5按姓名模糊查詢學(xué)生根本情況例5.6查詢學(xué)生出生日期例5.7觸發(fā)器修改、刪除信息時(shí),提醒例5.17老師基本信息表存儲(chǔ)過程創(chuàng)立表觸發(fā)器檢查老師編號(hào)1檢查職稱2學(xué)生學(xué)籍?dāng)?shù)據(jù)庫的

51、存儲(chǔ)過程和觸發(fā)器的設(shè)計(jì)構(gòu)造學(xué)生學(xué)籍?dāng)?shù)據(jù)庫的存儲(chǔ)過程和觸發(fā)器的設(shè)計(jì)構(gòu)造 6162第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器課程根本信息表存儲(chǔ)過程創(chuàng)立表根據(jù)學(xué)分、考核方式查詢課程根本信息例5.10檢索所有學(xué)分為3、4的課程例5.16觸發(fā)器 檢查老師編號(hào)3 檢查課程號(hào)考勤表存儲(chǔ)過程創(chuàng)立表觸發(fā)器檢查學(xué)號(hào)應(yīng)來自“學(xué)生根本信息表例5.21檢查課程號(hào)學(xué)生成績表存儲(chǔ)過程創(chuàng)立表觸發(fā)器檢查“考察課成績應(yīng)以60或20分計(jì)例5.20檢查學(xué)號(hào)和課程號(hào)學(xué)籍統(tǒng)計(jì)信息視圖存儲(chǔ)過程創(chuàng)立視圖觸發(fā)器檢查學(xué)號(hào)續(xù)前表續(xù)前表6263第第5 5章章 存儲(chǔ)過程與觸發(fā)器存儲(chǔ)過程與觸發(fā)器USE 學(xué)生學(xué)籍?dāng)?shù)據(jù)庫IF EXISTS SELECT name FROM sysobjects WHERE name = TeaNoCheck AND type = TR DROP TRIGGER TeaNoCheckGO- 在插入和修改記錄時(shí),檢查老師編號(hào)是否為3位數(shù)字字符CREATE TRIGGER TeaNoCheck ON 老師

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論