存储过程和触发器课件.ppt
7.2.1利用SQL命令創建觸發器(7)在觸發器內可以指定任意的SET語句,所選擇的SET選項在觸發器執行期間有效,並在觸發器執行完後恢復到以前的設置。(8)觸發器中不允許包含以下T-SQL語句:CREATEDATABASE、ALTERDATABASE、LOADDATABASE、RESTOREDATABASE、DROPDATABASE、LOADLOG、RESTORELOG、DISKINIT、DISKRESIZE和RECONFIGURE(9)觸發器不能返回任何結果,為了阻止從觸發器返回結果,不要在觸發器定義中包含SELECT語句或變數賦值。4.許可權CREATETRIGGER許可權默認授予定義觸發器的表所有者、sysadmin固定伺服器角色成員、db_owner和db_ddladmin固定資料庫角色成員,並且不可轉讓。7.2.1利用SQL命令創建觸發器5.舉例【例7.11】對於XSCJ資料庫,如果在XS表中添加或更改數據,則將向客戶端顯示一條資訊。/*使用帶有提示消息的觸發器*/USEXSCJIFEXISTS(SELECTnameFROMsysobjects WHEREname=reminderANDtype=TR)DROPTRIGGERreminderGOCREATETRIGGERreminderONXS FORINSERT,UPDATEASRAISERROR(4008,16,10)GO存儲過程和觸發器7.1存儲過程7.1.1存儲過程的類型(1)系統存儲過程系統存儲過程是由系統提供的存儲過程,作為命令執行各種操作。(2)本地存儲過程本地存儲過程是指在用戶數據庫中創建的存儲過程,這種存儲過程完成特定資料庫操作任務,其名稱不能以sp_為首碼。(3)臨時存儲過程臨時存儲過程屬於本地存儲過程。如果本地存儲過程的名稱前面有一個“#”,該存儲過程就稱為局部臨時存儲過程,這種存儲過程只能在一個用戶會話中使用。(4)遠程存儲過程遠程存儲過程指從遠程伺服器上調用的存儲過程。(5)擴展存儲過程在SQLServer環境之外執行的動態鏈接庫稱為擴展存儲過程,其首碼是sp_。使用時需要先加載到SQLServer系統中,並且按照使用存儲過程的方法執行。7.1.2用戶存儲過程的創建與執行在用戶存儲過程的定義中不能使用下列對象創建語句:CREATEVIEWCREATEDEFAULTCREATERULECREATEPROCEDURECREATETRIGGER1.通過SQL命令創建和執行存儲過程如果要通過SQL命令定義一個存儲過程查詢XSCJ資料庫中每個同學各門功課的成績,然後調用該存儲過程步驟如下:定義如下存儲過程USEXSCJGoCREATEPROCEDUREstudent_gradeASSELECTXS.學號,XS.姓名,KC.課程名,XS_KC.成績FROMXS,XS_KC,KCWHEREXS.學號=XS_KC.學號ANDXS_KC.課程號=KC.課程號Go7.1存儲過程使用存儲過程的優點:(1)存儲過程在伺服器端運行,執行速度快。(2)存儲過程執行一次後,其執行規劃就駐留在高速緩衝記憶體,在以後的操作中,只需從高速緩衝記憶體中調用已編譯好的二進位代碼執行,提高了系統性能。(3)確保資料庫的安全。使用存儲過程可以完成所有資料庫操作,並可通過編程方式控制上述操作對數據庫資訊訪問的許可權。(4)自動完成需要預先執行的任務。存儲過程可以在系統啟動時自動執行,而不必在系統啟動後再進行手工操作,大大方便了用戶的使用,可以自動完成一些需要預先執行的任務。7.1存儲過程調用存儲過程EXECstudent_gradeGO通過上例瞭解了存儲過程的使用,下麵介紹創建和執行存儲過程的語法格式。1)創建存儲過程語法格式:CREATEPROC[EDURE]procedure_name[;number]/*定義過程名*/[{@parameterdata_type} /*定義參數的類型*/[VARYING][=defau