什么是SQL Server存儲(chǔ)過(guò)程
是一種完成特定功能的SQL語(yǔ)句的集合,可視為批處理文件。類似于Java中的方法,可以有參數(shù)輸入值,輸出值,和輸入輸出值。
SQL Server存儲(chǔ)過(guò)程的優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
1.降低網(wǎng)絡(luò)流量,存儲(chǔ)過(guò)程代碼直接存儲(chǔ)于數(shù)據(jù)庫(kù)中,在客戶端與服務(wù)器的通信過(guò)程中,不會(huì)產(chǎn)生大量的T_SQL代碼流量。
2.加快系統(tǒng)運(yùn)行速度,存儲(chǔ)過(guò)程只在創(chuàng)建時(shí)編譯,以后每次執(zhí)行時(shí)不需要重新編譯。
3.可以多次調(diào)用。
缺點(diǎn)
1.無(wú)法移植到其他數(shù)據(jù)庫(kù)中。
2.代碼可讀性差,不易維護(hù)。
分類
分為系統(tǒng)存儲(chǔ)過(guò)程,與自定義存儲(chǔ)過(guò)程,和擴(kuò)展存儲(chǔ)過(guò)程。
1.系統(tǒng)存儲(chǔ)過(guò)程以'sp_'開頭,是系統(tǒng)創(chuàng)建的存儲(chǔ)過(guò)程,目的在于能夠方便的從系統(tǒng)表中查詢信息或完成與更新數(shù)據(jù)庫(kù)表相關(guān)的管理任務(wù)或其他的系統(tǒng)管理任務(wù)。
2.擴(kuò)展存儲(chǔ)過(guò)程是以在SQL SERVER環(huán)境外執(zhí)行的動(dòng)態(tài)連接(DLL文件)來(lái)實(shí)現(xiàn)的,可以加載到SQL SERVER實(shí)例運(yùn)行的地址空間中執(zhí)行,擴(kuò)展存儲(chǔ)過(guò)程可以用SQL SERVER擴(kuò)展存儲(chǔ)過(guò)程API編程,擴(kuò)展存儲(chǔ)過(guò)程以前綴"xp_"來(lái)標(biāo)識(shí),對(duì)于用戶來(lái)說(shuō),擴(kuò)展存儲(chǔ)過(guò)程和普通話存儲(chǔ)過(guò)程一樣,可以用相同的方法來(lái)執(zhí)行。
基本語(yǔ)法
創(chuàng)建,定義變量,使用輸入、輸出參數(shù)
create proc|procedure proc_name(
--變量用@符號(hào)標(biāo)識(shí)
@id int=100, --輸入?yún)?shù) 有默認(rèn)值
@name varchar2(50) out, --輸出參數(shù)
@school varchar2(50)='東軟%' output; --輸入輸出參數(shù) 默認(rèn)值可以使用通配符
)
as --該存儲(chǔ)過(guò)程所要執(zhí)行的內(nèi)容
select * from student;
go --類似于結(jié)束符
--執(zhí)行帶該返回值的存儲(chǔ)過(guò)程
--1.定義變量
declare @stu_name int, --declare定義變量用來(lái)接收輸出參數(shù)
@stu_school varchar2(50); --可以寫在一個(gè)關(guān)鍵字里 注意,與;的使用
set @stu_school='清華' --給定義的變量賦值
--2.執(zhí)行存儲(chǔ)過(guò)程
exec proc_name 99,@stu_name out,@stu_school output; --方式一按順序輸入?yún)?shù)
--exec proc_name @school=@stu_school output,@id=99; --方式二不按位置輸出參數(shù)
--3.查詢輸出值
select @stu_name,@stu_school
創(chuàng)建帶游標(biāo)的存儲(chǔ)過(guò)程
水平有限,過(guò)后補(bǔ)上