資源描述:
《t_sql介紹及實(shí)例.ppt》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、存儲(chǔ)過(guò)程和觸發(fā)器的功能和特點(diǎn)創(chuàng)建存儲(chǔ)過(guò)程修改存儲(chǔ)過(guò)程刪除存儲(chǔ)過(guò)程本章主要內(nèi)容存儲(chǔ)過(guò)程概述什么是存儲(chǔ)過(guò)程一組預(yù)先編釋好的代碼,可以做為一個(gè)獨(dú)立的數(shù)據(jù)庫(kù)對(duì)象,也可以作為一個(gè)單元被用戶(hù)的應(yīng)用程序調(diào)用。存儲(chǔ)過(guò)程在創(chuàng)建時(shí)就被編譯和優(yōu)化,調(diào)用一次以后,相關(guān)信息就保存在內(nèi)存中,下次無(wú)須編譯可以直接調(diào)用執(zhí)行?!ぴ试S模塊化編程,增強(qiáng)代碼的重用性和共享性·使用存儲(chǔ)過(guò)程可以加快程序的運(yùn)行速度.·使用存儲(chǔ)過(guò)程可以減少網(wǎng)絡(luò)流量?!ご鎯?chǔ)過(guò)程可以提高數(shù)據(jù)庫(kù)的安全性。存儲(chǔ)過(guò)程的優(yōu)點(diǎn)1、系統(tǒng)存儲(chǔ)過(guò)程2、用戶(hù)存儲(chǔ)過(guò)程3、臨時(shí)存儲(chǔ)過(guò)程4、擴(kuò)展存儲(chǔ)過(guò)程5、
2、遠(yuǎn)程存儲(chǔ)過(guò)程存儲(chǔ)過(guò)程的分類(lèi)系統(tǒng)存儲(chǔ)過(guò)程是由系統(tǒng)提供的過(guò)程,可以作為命令直接執(zhí)行。系統(tǒng)存儲(chǔ)過(guò)程存儲(chǔ)在master數(shù)據(jù)庫(kù)中,其前綴為sp_。系統(tǒng)存儲(chǔ)過(guò)程可以在任意一個(gè)數(shù)據(jù)庫(kù)中執(zhí)行。用戶(hù)存儲(chǔ)過(guò)程是創(chuàng)建在用戶(hù)數(shù)據(jù)庫(kù)中的存儲(chǔ)過(guò)程。其名稱(chēng)前面一般不加sp_前綴。主要在應(yīng)用程序中使用,以完成特定的任務(wù)。臨時(shí)存儲(chǔ)過(guò)程屬于用戶(hù)存儲(chǔ)過(guò)程。如果用戶(hù)存儲(chǔ)過(guò)程前面加上符號(hào)“#”,則該存儲(chǔ)過(guò)程稱(chēng)為局部臨時(shí)存儲(chǔ)過(guò)程,只能在一個(gè)用戶(hù)會(huì)話(huà)中使用。存儲(chǔ)過(guò)程的分類(lèi)4、擴(kuò)展存儲(chǔ)過(guò)程是在SQLServer環(huán)境之外執(zhí)行的動(dòng)態(tài)鏈接庫(kù)DLL,其前綴為xp_。盡管這
3、些動(dòng)態(tài)鏈接庫(kù)在SQLServer環(huán)境之外,但它們可以被加載到SQLServer系統(tǒng)中,并且按照存儲(chǔ)過(guò)程的方式執(zhí)行。5、遠(yuǎn)程存儲(chǔ)過(guò)程是指從遠(yuǎn)程服務(wù)器上調(diào)用的存儲(chǔ)過(guò)程,或者是從連接到另外一個(gè)服務(wù)器上的客戶(hù)機(jī)上調(diào)用的存儲(chǔ)過(guò)程。存儲(chǔ)過(guò)程的分類(lèi)創(chuàng)建存儲(chǔ)過(guò)程在SQLServer中使用三種方法創(chuàng)建存儲(chǔ)過(guò)程:①使用創(chuàng)建存儲(chǔ)過(guò)程向?qū)?chuàng)建存儲(chǔ)過(guò)程。②利用SQLServer企業(yè)管理器創(chuàng)建存儲(chǔ)過(guò)程。③使用Transact-SQL語(yǔ)句中的CREATEPROCEDURE命令創(chuàng)建存儲(chǔ)過(guò)程。使用向?qū)?chuàng)建存儲(chǔ)過(guò)程使用企業(yè)管理器創(chuàng)建存儲(chǔ)過(guò)程創(chuàng)建存儲(chǔ)過(guò)程
4、CREATEPROC[EDURE]存儲(chǔ)過(guò)程名[;數(shù)字][@參數(shù)數(shù)據(jù)類(lèi)型[=default][OUTPUT][WithRECOMPILE--重新編譯
5、ENCRYPTION--加密
6、RECOMPILE,ENCRYPTION]ASSQL語(yǔ)句不帶參數(shù)的存儲(chǔ)過(guò)程:CREATEPROCpr_例一ASSELECT*FROM學(xué)生花名冊(cè)GOEXECpr_例一查看存儲(chǔ)過(guò)程用于顯示存儲(chǔ)過(guò)程的參數(shù)及其數(shù)據(jù)類(lèi)型sp_help[[@objname=]存儲(chǔ)過(guò)程名稱(chēng)]用于顯示存儲(chǔ)過(guò)程的源代碼sp_helptext[[@objname=]存儲(chǔ)過(guò)程名稱(chēng)
7、]用于顯示和存儲(chǔ)過(guò)程相關(guān)的數(shù)據(jù)庫(kù)對(duì)象sp_depends[@objname=]’存儲(chǔ)過(guò)程名稱(chēng)’用于返回當(dāng)前數(shù)據(jù)庫(kù)中的存儲(chǔ)過(guò)程列表sp_stored_procedures[@objname=]’存儲(chǔ)過(guò)程名稱(chēng)’執(zhí)行存儲(chǔ)過(guò)程如果對(duì)存儲(chǔ)過(guò)程的調(diào)用是批處理的第一條語(yǔ)句,則可以省略exec關(guān)鍵字,直接使用存儲(chǔ)過(guò)程的名字調(diào)用這個(gè)存儲(chǔ)過(guò)程寫(xiě)入存儲(chǔ)過(guò)程名直接執(zhí)行。Exec[ute]存儲(chǔ)過(guò)程名刪除存儲(chǔ)過(guò)程Dropprocedure名字[,……n]修改存儲(chǔ)過(guò)程Alterproc[dure]存儲(chǔ)過(guò)程名[withencryption]AsSQ
8、L語(yǔ)句修改pr_例一存儲(chǔ)過(guò)程,使其按年齡排序ALTERPROCpr_例一ASSELECT*FROM學(xué)生花名冊(cè)O(shè)RDERBY年齡EXECpr_例一重命名存儲(chǔ)過(guò)程sp_rename原存儲(chǔ)過(guò)程名稱(chēng),新存儲(chǔ)過(guò)程名稱(chēng)通過(guò)存儲(chǔ)過(guò)程傳遞參數(shù)CreatePROC過(guò)程名(參數(shù)數(shù)據(jù)類(lèi)型[=DEFAULT][OUTPUT])ASSQL語(yǔ)句Default:定義參數(shù)的默認(rèn)值,如果定義了一個(gè)默認(rèn)值,則在調(diào)用存儲(chǔ)過(guò)程時(shí),可以不指定該參數(shù)的值。默認(rèn)值必須是一個(gè)常量,或者是null。帶參數(shù)的存儲(chǔ)過(guò)程:CREATEPROCEDUREpr_例二@xhin
9、t=1ASBEGINSETNOCOUNTONSELECT*FROM學(xué)生花名冊(cè)WHERE學(xué)號(hào)=@xhENDDECLARE@接收值INTEXECpr_例二6PRINT@接收值存儲(chǔ)過(guò)程的執(zhí)行[[EXEC[UTE]]{[@返回值=]存儲(chǔ)過(guò)程名[;數(shù)字]@參數(shù)={值
10、變量[OUTPUT]
11、[DEFAULT]}[WITHRECOMPILE]CREATEPROCpr_例一ASBEGINDECLARE@返回值intSELECT@返回值=COUNT(DISTINCT學(xué)號(hào))FROM學(xué)生花名冊(cè)RETURN@返回值ENDEXECpr_例一D
12、ECLARE@接收值INTEXEC@接收值=pr_例一PRINT@接收值CREATEPROCpr_例一@返回值INTOUTPUTASBEGINSELECT@返回值=COUNT(DISTINCT學(xué)號(hào))FROM學(xué)生花名冊(cè)ENDDECLARE@接收值INTEXECpr_例一@接收值OUTPUTPRINT@接收值創(chuàng)建一個(gè)存儲(chǔ)過(guò)程,求兩個(gè)整數(shù)的乘積CRE