? 說出來有點(diǎn)丟人,做sqlserver應(yīng)用系統(tǒng)近一年,竟然沒有使用過存儲(chǔ)過程,現(xiàn)在就好好的梳理一下對(duì)應(yīng)知識(shí),慢慢讓其加入到我的項(xiàng)目中去吧。
? 存儲(chǔ)過程的優(yōu)點(diǎn):1、運(yùn)行效率高,提供了在服務(wù)器端快速執(zhí)行sql語句的有效途徑。2、存儲(chǔ)過程降低了客戶機(jī)和服務(wù)器之間的通信量。3、方便實(shí)施企業(yè)規(guī)則。
? (1)創(chuàng)建存儲(chǔ)過程
? ①創(chuàng)建一個(gè)存儲(chǔ)過程,查看00005號(hào)課程的選修情況,包括選修該課程學(xué)生的學(xué)號(hào)、姓名和成績(jī)。
? ?解答:
? ? ? ? ? ? ? USE SM(數(shù)據(jù)庫名稱)
? ? ? ? ? ? ? GO
? ? ? ? ? ? ? CREATE PROCEDURE ssc_3
? ? ? ? ? ? ? AS
? ? ? ? ? ? ? ? ? ?SELECT Student.SNo,SName,Score
? ? ? ? ? ? ? ? ? ?FROM Student LEFT JOIN SC ON Student.SNo=SC.SNo
? ? ? ? ? ? ? ? ? ?WHERE SC.SNo='00005'
? ? ? ? ? ? ? ? ? ?GO
按F5鍵,創(chuàng)建成功
②執(zhí)行存儲(chǔ)過程:EXECUTE ssc_3
(2)使用輸入?yún)?shù)
?①上面建立的存儲(chǔ)過程只能對(duì)00005號(hào)課程的選修情況進(jìn)行查看,要想對(duì)所有課程進(jìn)行隨機(jī)查看,需要進(jìn)行參數(shù)的傳遞
USE SM
GO
CREATE PROCEDURE ssc_4
@cnumber CHAR(5)
AS
?SELECT Student.SNo,SName,Score
?FROM Student LEFT JOIN SC ON Student.SNo=SC.SNo
?WHERE SC.SNo=@cnumber
GO
②按位置傳遞參數(shù)
EXECUTE ssc_4 '00008'
③通過參數(shù)名傳遞參數(shù)
EXECUTE ssc_4?
@cnumber='00008'
?(3)使用默認(rèn)參數(shù)值
①執(zhí)行存儲(chǔ)過程ssc_4時(shí),如果沒有給出參數(shù),系統(tǒng)會(huì)報(bào)錯(cuò)。如果希望不給參數(shù)時(shí),能查詢所有課程的選修情況,則可以使用默認(rèn)參數(shù)來實(shí)現(xiàn)
?USE SM?
GO
CREATE PROCEDURE ssc_5
@cnumber CHAR(5) =NULL
AS?
IF ?@cnumber IS NULL
BEGIN
SELECT Student.SNo,SName,Score
FROM Stuent JOIN SC ON Student.SNo=SC.SNo
END
ELSE
BEGIN
SELECT Student.SNo,SName,Score FROM Student JOIN SC ON Student.SNo=SC.SNo
WHERE SC.SNo=@cnumber
END
GO
②執(zhí)行下面兩條語句,比較執(zhí)行結(jié)果。
EXECUTE ssc_5
EXECUTE ssc_5 '00005'
(4)使用輸出參數(shù)
①創(chuàng)建一個(gè)存儲(chǔ)過程ssc_6,獲得選修某門課程的總?cè)藬?shù)
USE SM?
GO
CREATE PROCEDURE ssc_6
@cnumber CHAR(5),@ccount INT OUTPUT
AS?
SELECT @ccount=COUNT(*) FROM SC WHERE SC.CNo=@cnumber
GO
@執(zhí)行存儲(chǔ)過程ssc_6
DECLARE @ccount INT
EXECUTE ssc_6 '00008',@ccount OUTPUT
SELECT 'the result is',@ccount
(5)使用返回值
①創(chuàng)建一個(gè)返回執(zhí)行狀態(tài)碼的存儲(chǔ)過程ssc_7,它接受課程號(hào)為輸入?yún)?shù),如果執(zhí)行成功,返回0;如果沒有給出課程號(hào),返回錯(cuò)誤碼1;如果給出的課程號(hào)不存在,返回錯(cuò)誤碼2;如果出現(xiàn)其他錯(cuò)誤,返回錯(cuò)誤碼3.
USE SM
GO
CREATE PROCEDURE ssc_7
@cnumber CHAR(5) = NULL
AS
IF @cnumber IS NULL
BEGIN
? ? PRINT 'error:you must specify a course number.'
? ? RETURN(1)
? ? END
ELSE
BEGIN
? ? IF(SELECT COUNT(*) FROM SC WHERE CNo=@cumber)=0
? ? BEGIN
? ? PRINT 'error:you must specify a valid Course number'
? ? RETURN(2)
? ? ?END
END
SELECT @cnumber AS CNo FROM SC WHERE CNo=@cnumber?
IF @@error<>0
BEGIN?
RETURN(3)
END
ELSE
RETURN(0)
GO
執(zhí)行存儲(chǔ)過程ssc_7
DECLARE @result INT
EXEC @result ==ssc_7
SELECT 'the result is',@result
(6)修改存儲(chǔ)過程(sqlserver 2008下)
在數(shù)據(jù)庫根目錄下,打開可編程選項(xiàng)下得存儲(chǔ)過程選項(xiàng),選擇要修改的存儲(chǔ)過程,右擊鼠標(biāo),在彈出的對(duì)話框中選擇修改即可
(7)查看存儲(chǔ)過程。
? 執(zhí)行以下語句,查看存儲(chǔ)過程ssc_3 的信息。
EXEC sp_help ssc_3
(8)刪除存儲(chǔ)過程
執(zhí)行以下語句,刪除存儲(chǔ)過程ssc_3
DROP PROCEDURE ssc_3
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
