SQL SERVER數(shù)據(jù)庫(kù)開(kāi)發(fā)之存儲(chǔ)過(guò)程的應(yīng)用
一、創(chuàng)建存儲(chǔ)過(guò)程
和數(shù)據(jù)表一樣,在使用之前我們需要?jiǎng)?chuàng)建存儲(chǔ)過(guò)程,它的簡(jiǎn)明語(yǔ)法是:
CREATE PROC 存儲(chǔ)過(guò)程名稱(chēng) [參數(shù)列表(多個(gè)以“,”分隔)]ASSQL 語(yǔ)句例如
CREATE PROC upGetUserName@intUserId;;;;;INT,@ostrUserName NVARCHAR(20) OUTPUT;;;;;-- 要輸出的參數(shù)ASBEGIN -- 將uName的值賦給 @ostrUserName 變量,即要輸出的參數(shù) SELECT @ostrUserName=uName FROM uUser WHERE uId=@intUserIdEND其中 CREATE PROC 語(yǔ)句(完整語(yǔ)句為CREATE PROCEDURE)的意思就是告訴SQL SERVER,現(xiàn)在需要建立一個(gè)存儲(chǔ)過(guò)程,upGetUserName 就是存儲(chǔ)過(guò)程名稱(chēng),@intUserId 和 @ostrUserName 分別是該存儲(chǔ)過(guò)程的兩個(gè)參數(shù),注意,在SQL SERVER中,所有用戶定義的變量都以“@”開(kāi)頭,OUTPUT關(guān)鍵字表示這個(gè)參數(shù)是用來(lái)輸出的,AS之后就是存儲(chǔ)過(guò)程內(nèi)容了。只要將以上代碼在“查詢分析器”里執(zhí)行一次,SQL SERVER就會(huì)在當(dāng)前數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)名為“upGetUserName”的存儲(chǔ)過(guò)程。你可以打開(kāi)“企業(yè)管理器”,選擇當(dāng)前操作的數(shù)據(jù)庫(kù),然后在左邊的樹(shù)型列表中選擇“存儲(chǔ)過(guò)程”,此時(shí)就可以在右邊的列表中看到你剛剛創(chuàng)建的存儲(chǔ)過(guò)程了(如果沒(méi)有,刷新一下即可)。
三、存儲(chǔ)過(guò)程的實(shí)際應(yīng)用
用戶登錄在ASP項(xiàng)目中經(jīng)常會(huì)使用到,相信很多朋友也都做過(guò)類(lèi)似的系統(tǒng),但使用存儲(chǔ)過(guò)程來(lái)做驗(yàn)證朋友可能不多,那么我們就以它來(lái)做例子,寫(xiě)一個(gè)簡(jiǎn)單的用戶登錄驗(yàn)證的存儲(chǔ)過(guò)程。
CREATE PROC upUserLogin@strLoginName;;;;;NVARCHAR(20),@strLoginPwd;;;;;NVARCHAR(20),@blnReturn;;;;;BIT OUTPUTAS-- 定義一個(gè)臨時(shí)用來(lái)保存密碼的變量DECLARE @strPwd NVARCHAR(20)BEGIN -- 從表中查詢當(dāng)前用戶的密碼,賦值給 @strPwd 變量,下面要對(duì)他進(jìn)行比較 SELECT @strPwd=uLoginPwd FROM uUser WHERE uLoginName=@strLoginName
IF @strLoginPwd = @strPwd BEGIN SET @blnReturn = 1 -- 更新用戶最后登錄時(shí)間 UPDATE uUser SET uLastLogin=GETDATE() WHERE uLoginName=@strLoginName END ELSE SET @blnReturn = 0END
