--十二.預存程序--建立預存程序create procedure book1_pr1asselect book1.書名 from book1--執行預存程序execute book1_pr1--查看預存程序sp_helptext book1_pr1--帶輸入參數的預存程序create proc book1_pr2@書名 char(20)asselect * from book1where 書名=@書名--執行帶參預存程序exec book1_pr2 @書名='sql資料庫'--帶輸出參數的預存程序,指定OUTPUT關鍵詞 create proc book1_pr3@書名 char(20), @book1NUM smallINT outputasset @book1NUM=(select COUNT(*) from book1where 書名=@書名)print @book1NUM--執行時,輸入參數要賦值,面輸出參數不用賦值declare @書名 char(20), @book1NUM smallINTset @書名='sql資料庫'exec book1_pr3 @書名,@book1NUM--修改,加密,重新編譯預存程序alter proc book1_pr1@出版社 varchar(20)/*with encryption*/ with recompile --在定義時重新編譯asselect * from book1where 出版社=@出版社declare @出版社 varchar(20)set @出版社='中山大學'exec book1_pr1 @出版社--執行時重新編譯declare @出版社 varchar(20)set @出版社='中山大學'exec book1_pr1 @出版社 with recompile--通過系統預存程序重新編譯exec sp_recompile book1_pr1--十三.觸發器,insert/delete/update--建立觸發器create trigger book1_tr1on book1for insert --觸發器和觸發語句都會執行asprint '插入成功'insert into book1 values ('134472','172','sql資料庫',35,'中山大學','03-13-2008')--觸發器執行,但觸發語句不執行,用INSTEAD OFcreate trigger book1_tr2on book1instead of deleteasprint '不能刪除!'delete from book1 --測試一下select * from book1 --發現表中資料並沒有刪除--if update(column_name),不用INSTEAD OF,而是用ROLLBACK TRANSACTION來復原create trigger book1_tr3on book1for updateasif update(定價)beginrollback transactionend--測試一下update book1set 定價=45where 編號='101172'/*訊息 3609,層級 16,狀態 1,第 1 行事務在觸發器中結束。批處理已中止。*/--管理觸發器--1.sp_help trigger_name,瞭解觸發器的一般資訊,如名稱,建立時間等exec sp_help book1_tr3--2,sp_helptext trigger_name,查看TRIGGER的定義資訊exec sp_helptext book1_tr3--3,sp_depends trigger_name | table_name,查看觸發器所引用的表或表涉及的所有觸發器和預存程序exec sp_depends book1_tr3exec sp_depends book1--4,sp_helptrigger table_name,查看錶所涉及所有觸發器的資訊exec sp_helptrigger book1--5,通過系統資料表來查看觸發器的資訊select *from sysobjectswhere type='tr'--6,禁止觸發器alter table book1disable trigger trigger_name | all--啟用觸發器alter table book1enable trigger trigger_name | all
學習教材下載