資源描述:
《sqlserver2005存儲(chǔ)過(guò)程》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)。
1、儲(chǔ)存過(guò)程的分類(lèi):1.系統(tǒng)存儲(chǔ)過(guò)程,存放在MASTER數(shù)據(jù)庫(kù)中,以SP_前綴。2.用戶自定義存儲(chǔ)過(guò)程。?在SQLSERVER中創(chuàng)建儲(chǔ)存過(guò)程語(yǔ)法:Createproc[edure]procedure_name[;number][{@parameterdata_type}[varying][=default][output]][,…n][with{recompile
2、encryption
3、encrypton,recomption}][forenplication]AsSql_statement[,…n]參數(shù):整個(gè)語(yǔ)法中只有兩個(gè)參數(shù)是必須的:procedure_name存儲(chǔ)過(guò)程
4、名稱(chēng)和sql_statement存儲(chǔ)過(guò)程內(nèi)容。procedure_name:存儲(chǔ)過(guò)程名稱(chēng)。;number:對(duì)存儲(chǔ)過(guò)程分組,“;數(shù)字”表示是一組存儲(chǔ)過(guò)程,便于批量操作。@parameter:參數(shù)名,命名必須用@開(kāi)頭;局部變量以@開(kāi)頭,全局變量以@@開(kāi)頭。data_type:參數(shù)類(lèi)型。varying:指定作為輸出參數(shù)的結(jié)果集。Default:參數(shù)的默認(rèn)值。Output:表示為輸出參數(shù),返回值給execute/exe。[with{recompile
5、encryption
6、encrypton,recomption}][forenplication]:這個(gè)我還不明白。。。As:指
7、定儲(chǔ)存過(guò)程要執(zhí)行的操作。?執(zhí)行存儲(chǔ)過(guò)程語(yǔ)法:Exec[ute]存儲(chǔ)過(guò)程名參數(shù)?實(shí)驗(yàn)一下,看看效果:1.創(chuàng)建一組存儲(chǔ)過(guò)程并且執(zhí)行createprocedureprocedure_a;1asselect*fromstudentgocreateprocedureprocedure_a;2asselect*fromstudentgo執(zhí)行創(chuàng)建效果截圖:圖1創(chuàng)建一組存儲(chǔ)過(guò)程2.執(zhí)行語(yǔ)句:Executeprocedure_a效果截圖:圖2執(zhí)行存儲(chǔ)過(guò)程效果截圖3.刪除語(yǔ)句:Dropprocedureprocedure_a效果截圖圖3刪除一組儲(chǔ)存過(guò)程效果截圖?創(chuàng)建帶輸入?yún)?shù)的存儲(chǔ)過(guò)程:輸
8、入?yún)?shù)是程序?qū)?shù)值傳遞給存儲(chǔ)過(guò)程。創(chuàng)建一個(gè)帶輸入?yún)?shù)的存儲(chǔ)過(guò)程,設(shè)置默認(rèn)值,并且對(duì)輸入?yún)?shù)的值進(jìn)行判斷。Createprocedurepro_1@pro_1_avarchar(20)=nullAsIf@pro_1_aisnullPrint'請(qǐng)輸入需要查詢(xún)的所屬院系:'elseSelectavg(成績(jī))fromstudentwhere所屬院系=@pro_1_a分別執(zhí)行一下:1.execpro_1效果截圖:圖4執(zhí)行不帶輸入?yún)?shù)的語(yǔ)句2.execpro_1‘計(jì)算機(jī)’效果截圖:圖5執(zhí)行帶輸入?yún)?shù)的語(yǔ)句哈哈,verygood,有進(jìn)步啊。?創(chuàng)建帶輸出參數(shù)的存儲(chǔ)過(guò)程:輸出參數(shù)是存儲(chǔ)
9、過(guò)程將返回值傳遞給程序。1.輸出函數(shù)需要指定output作為標(biāo)識(shí)2.聲明變量需要使用declare3.給變量指定值需要使用select來(lái)一個(gè)例子:如果一個(gè)數(shù)大于5,則計(jì)算他的階乘。Createprocedurepro_2/*聲明輸入輸出參數(shù)*/@in_xint,@out_yintoutputas/*聲明標(biāo)量,并且賦值為1*/Declare@xint,@yintSelect@x=1,@y=1/*if語(yǔ)句判斷輸入值是否合法,使用while循環(huán)語(yǔ)句計(jì)算*/If@in_x<=5Print'請(qǐng)輸入大于5的數(shù):'ElseWhile@x<=@in_xBeginSelect@y=@y*
10、@xSelect@x=@x+1EndSelect@out_y=@y1.執(zhí)行以上創(chuàng)建代碼圖6創(chuàng)建帶輸入輸出參數(shù)的存儲(chǔ)過(guò)程截圖2.提供參數(shù)執(zhí)行代碼Declare@out_sumintExecpro_26,@out_sumoutputSelect@out_sumasresult圖7提供輸入輸出參數(shù)執(zhí)行存儲(chǔ)過(guò)程截圖?創(chuàng)建多條語(yǔ)句的存儲(chǔ)過(guò)程:一個(gè)存儲(chǔ)過(guò)程中可以寫(xiě)入多條SQL語(yǔ)句,這些語(yǔ)句將被依次執(zhí)行,可以實(shí)現(xiàn)多個(gè)功能。?刪除存儲(chǔ)過(guò)程delete及判斷對(duì)象是否存在exists:Deleteprocedureprocedure_nameIfexists(select子查詢(xún)):如果ex
11、ists的參數(shù)查詢(xún)?yōu)榉强?,則exists結(jié)果為true,否則為假。存儲(chǔ)過(guò)程作為一個(gè)對(duì)象將被保存在數(shù)據(jù)庫(kù)的sysobjects表中,可以使用語(yǔ)句判斷這個(gè)對(duì)象是否存在:select*fromsysobjectswherename=’procedure_name’?幾個(gè)系統(tǒng)存儲(chǔ)過(guò)程的使用:Sp_name:重命名對(duì)象--Sp_nameobject1,object2Sp_depends:顯示引用對(duì)象—sp_dependsstudentsSp_help:顯示對(duì)象信息Sp_helptext:顯示對(duì)象的源代碼