sqlserver中常用的几个存储过程
sqlserver中的存儲(chǔ)過(guò)程,何為存儲(chǔ)過(guò)程呢?
存儲(chǔ)過(guò)程(Stored Procedure)是在大型數(shù)據(jù)庫(kù)系統(tǒng)中,一組為了完成特定功能的SQL 
 語(yǔ)句集,存儲(chǔ)在數(shù)據(jù)庫(kù)中,經(jīng)過(guò)第一次編譯后再次調(diào)用不需要再次編譯,用戶通過(guò)指定存儲(chǔ)過(guò)程的名字并給出參數(shù)(如果該存儲(chǔ)過(guò)程帶有參數(shù))來(lái)執(zhí)行它。存儲(chǔ)過(guò)程是數(shù)據(jù)庫(kù)中的一個(gè)重要對(duì)象。 
 .
存儲(chǔ)過(guò)程的優(yōu)點(diǎn):
①重復(fù)使用。存儲(chǔ)過(guò)程可以重復(fù)使用,從而可以減少數(shù)據(jù)庫(kù)開發(fā)人員的工作量。 
 ②減少網(wǎng)絡(luò)流量。存儲(chǔ)過(guò)程位于服務(wù)器上,調(diào)用的時(shí)候只需要傳遞存儲(chǔ)過(guò)程的名稱以及參數(shù)就可以了,因此降低了網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)量。 
 ③安全性。參數(shù)化的存儲(chǔ)過(guò)程可以防止SQL注入式攻擊,而且可以將Grant、Deny以及Revoke權(quán)限應(yīng)用于存儲(chǔ)過(guò)程。 簡(jiǎn)單講: 
 1.存儲(chǔ)過(guò)程只在創(chuàng)造時(shí)進(jìn)行編譯,以后每次執(zhí)行存儲(chǔ)過(guò)程都不需再重新編譯,而一般SQL語(yǔ)句每執(zhí)行一次就編譯一次,所以使用存儲(chǔ)過(guò)程可提高數(shù)據(jù)庫(kù)執(zhí)行速度。 
 2.當(dāng)對(duì)數(shù)據(jù)庫(kù)進(jìn)行復(fù)雜操作時(shí)(如對(duì)多個(gè)表進(jìn)行Update,Insert,Query,Delete時(shí)),可將此復(fù)雜操作用存儲(chǔ)過(guò)程封裝起來(lái)與數(shù)據(jù)庫(kù)提供的事務(wù)處理結(jié)合一起使用。 
 3.存儲(chǔ)過(guò)程可以重復(fù)使用,可減少數(shù)據(jù)庫(kù)開發(fā)人員的工作量 
 4.安全性高,可設(shè)定只有某些用戶才具有對(duì)指定存儲(chǔ)過(guò)程的使用權(quán) 有一點(diǎn)需要注意的是,一些網(wǎng)上盛傳的所謂的存儲(chǔ)過(guò)程要比sql語(yǔ)句執(zhí)行更快的說(shuō)法,實(shí)際上是個(gè)誤解,并沒有根據(jù),包括微軟內(nèi)部的人也不認(rèn)可這一點(diǎn),所以不能作為正式的優(yōu)點(diǎn),希望大家能夠認(rèn)識(shí)到這一點(diǎn)。
缺點(diǎn):
1:調(diào)試麻煩,但是用 PL/SQL Developer 調(diào)試很方便!彌補(bǔ)這個(gè)缺點(diǎn)。 
 2:移植問(wèn)題,數(shù)據(jù)庫(kù)端代碼當(dāng)然是與數(shù)據(jù)庫(kù)相關(guān)的。但是如果是做工程型項(xiàng)目,基本不存在移植問(wèn)題。 
 3:重新編譯問(wèn)題,因?yàn)楹蠖舜a是運(yùn)行前編譯的,如果帶有引用關(guān)系的對(duì)象發(fā)生改變時(shí),受影響的存儲(chǔ)過(guò)程、包將需要重新編譯(不過(guò)也可以設(shè)置成運(yùn)行時(shí)刻自動(dòng)編譯)。 
 4: 
 如果在一個(gè)程序系統(tǒng)中大量的使用存儲(chǔ)過(guò)程,到程序交付使用的時(shí)候隨著用戶需求的增加會(huì)導(dǎo)致數(shù)據(jù)結(jié)構(gòu)的變化,接著就是系統(tǒng)的相關(guān)問(wèn)題了,最后如果用戶想維護(hù)該系統(tǒng)可以說(shuō)是很難很難、而且代價(jià)是空前的,維護(hù)起來(lái)更麻煩。
“
下面就是舉例sqlserver中的存儲(chǔ)過(guò)程的幾個(gè)案例:
--創(chuàng)建一個(gè)存儲(chǔ)過(guò)程,查詢?nèi)康膯T工信息 CREATE PROCEDURE finAll ASBEGINSELECT * FROM emp END EXECUTE finAll--根據(jù)員工名稱模糊查詢員工信息 DROP PROCEDURE findByname CREATE PROCEDURE findByname@name VARCHAR(50) --傳入一個(gè)參數(shù),姓名 AS BEGINSELECT * FROM emp WHERE ename like '%'+@name+'%' END--調(diào)用存儲(chǔ)過(guò)程 EXECUTE findByname '張'--創(chuàng)建一個(gè)帶輸出參數(shù)的存儲(chǔ)過(guò)程 CREATE PROCEDURE out_emp@name VARCHAR(50) OUTPUT,@age INT OUTPUT,@DATE DATE OUTPUT AS BEGIN SELECT @name = ename,@age = eage,@DATE = eDATE FROM emp ENDDECLARE @_name VARCHAR(50); DECLARE @_age INT ; DECLARE @_DATE DATE;EXECUTE out_emp @_name OUTPUT ,@_age OUTPUT ,@_DATE OUTPUT; PRINT @_name PRINT @_age PRINT @_DATE --根據(jù)名稱模糊查詢員工信息(使用if) CREATE PROCEDURE findByNameAsIf@_name varchar(50)ASBEGIN IF @_name is null or @_name =''BEGINSELECT * FROM emp;ENDELSEBEGINSELECT * FROM emp WHERE ename LIKE '%'+@_name+'%';END END--調(diào)用存儲(chǔ)過(guò)程 EXECUTE findByNameAsIf '張' EXECUTE findByNameAsIf ''總結(jié)
以上是生活随笔為你收集整理的sqlserver中常用的几个存储过程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: Eleven2对HostGator-20
- 下一篇: 利用老毛头启动盘重装win7
