一、創(chuàng)建存儲(chǔ)過程
CREATE PROC
存儲(chǔ)過程名稱
[參數(shù)列表(多個(gè)以“,”分隔)]
AS?? SQL 語句
例:
?CREATE? PROC ??upGetUserName
@intUserId? INT,
@ostrUserName NVARCHAR(20)? OUTPUT? -- 要輸出的參數(shù)
AS
BEGIN
-- 將uName的值賦給@ostrUserName 變量,即要輸出的參數(shù)
SELECT @ostrUserName=uName FROM uUser WHERE uId=@intUserId
END
其中CREATE PROC 語句(完整語句為 CREATE PROCEDURE)的意思就是告訴SQL SERVER,現(xiàn)在需要建立一個(gè)存儲(chǔ)過程,upGetUserName 就是存儲(chǔ)過程名稱@intUserId 和@ostrUserName 分別是該存儲(chǔ)過程的兩個(gè)參數(shù),注意,在SQL SERVER中,所有用戶定義的變量都以“@”開頭,OUTPUT關(guān)鍵字表示這個(gè)參數(shù)是用來輸出的,AS之后就是存儲(chǔ)過程內(nèi)容了。只要將以上代碼在“查詢分析器”里執(zhí)行一次,SQL SERVER就會(huì)在當(dāng)前數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)名為“upGetUserName”的存儲(chǔ)過程。你可以打開“企業(yè)管理器”,選擇當(dāng)前操作的數(shù)據(jù)庫(kù),然后在左邊的樹型列表中選擇“存儲(chǔ)過程”,此時(shí)就可以在右邊的列表中看到你剛剛創(chuàng)建的存儲(chǔ)過程了(如果沒有,刷新一下即可)。
?
二、存儲(chǔ)過程的調(diào)用
之前我們已經(jīng)創(chuàng)建了一個(gè)名為“upGetUserName”的存儲(chǔ)過程,從字面理解該存儲(chǔ)過程的功能是用來取得某一個(gè)用戶的名稱。存儲(chǔ)過程建立好了,接下來就是要在應(yīng)用程序里調(diào)用了,下面看一下在ASP程序里的調(diào)用。
?Dim adoComm '// 創(chuàng)建一個(gè)對(duì)象,我們用來調(diào)用存儲(chǔ)過程
?Set adoComm = CreateObject("ADODB.Command") With adoComm '
// 設(shè)置連接,設(shè)adoConn 為已經(jīng)連接的ADODB.Connection 對(duì)象?
.ActiveConnection = adoConn '
// 類型為存儲(chǔ)過程,adCmdStoredProc = 4
.CommandType = 4 '
// 存儲(chǔ)過程名稱
.CommandText = "upGetUserName"
'// 設(shè)置用戶編號(hào)
.Parameters.Item("@intUserId").Value = 1
'// 執(zhí)行存儲(chǔ)過程
.Execute
'// 取得從存儲(chǔ)過程返回的用戶名稱
Response.Write "用戶名: " & .Parameters.Item("@ostrUserName").Value
End With
'// 釋放對(duì)象
Set adoComm = Nothing
?
三、存儲(chǔ)過程的實(shí)際應(yīng)用
CREATE PROC upUserLogin
@strLoginName? NVARCHAR(20),
@strLoginPwd? NVARCHAR(20),
@blnReturn? BIT OUTPUT
AS
-- 定義一個(gè)臨時(shí)用來保存密碼的變量
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 = 0
? END
用戶登錄的存儲(chǔ)過程建立好了,現(xiàn)在在程序里試一下吧。注意,在一個(gè)區(qū)域內(nèi)如果有多條語句時(shí),必需使用BEGIN...END關(guān)鍵字。
QUOTE:
// 創(chuàng)建一個(gè)對(duì)象,我們用來調(diào)用存儲(chǔ)過程
Set adoComm = CreateObject("ADODB.Command")
With adoComm
'// 設(shè)置連接,設(shè)adoConn 為已經(jīng)連接的ADODB.Connection 對(duì)象
.ActiveConnection = adoConn '
// 類型為存儲(chǔ)過程,adCmdStoredProc = 4
.CommandType = 4
'// 存儲(chǔ)過程名稱
.CommandText = "upUserLogin"
'// 設(shè)置登錄名稱
.Parameters.Item("@strLoginName").Value = "admin"
'// 設(shè)置登錄密碼
.Parameters.Item("@strLoginPwd").Value = "123456"
'// 執(zhí)行存儲(chǔ)過程
.Execute
'// 判斷是否登錄成功
If .Parameters.Item("@blnReturn").Value = 1 Then
Response.Write "恭喜你,登錄成功!"
Else
Response.Write "不是吧,好像錯(cuò)了哦。。。"
? End If
End With
'// 釋放對(duì)象
Set adoComm = Nothing
通過以上的步驟,簡(jiǎn)單用戶登錄驗(yàn)證過程也做完了,現(xiàn)在只要把它整合到程序中就可以實(shí)現(xiàn)簡(jiǎn)單的用戶登錄驗(yàn)證了,關(guān)于其他細(xì)節(jié)就由你自己來處理了。
上面介紹的兩個(gè)存儲(chǔ)過程都是只返回一個(gè)值的,下面我們來看一個(gè)返回一個(gè)記錄集的存儲(chǔ)過程。
QUOTE:
CREATE PROC upGetUserInfos
@intUserGroup? INT
AS
BEGIN
-- 從數(shù)據(jù)庫(kù)中抽取符合條件的數(shù)據(jù)
SELECT uName,uGroup,uLastLogin FROM uUser WHERE
uGroup=@intUserGroup
-- 插入一列合計(jì)
UNION
SELECT '合計(jì)人數(shù):',COUNT(uGroup),NULL FROM uUser WHERE
uGroup=@intUserGroup
END
現(xiàn)在我們來看一下ASP程序的調(diào)用。
QUOTE:
Dim adoComm
Dim adoRt
'// 創(chuàng)建一個(gè)對(duì)象,我們用來調(diào)用存儲(chǔ)過程
Set adoComm = CreateObject("ADODB.Command")
Set adoRs = CreateObject("ADODB.Recordset")
With adoComm
'// 設(shè)置連接,設(shè)adoConn 為已經(jīng)連接的ADODB.Connection 對(duì)象
.ActiveConnection = adoConn
'// 類型為存儲(chǔ)過程,adCmdStoredProc = 4
.CommandType = 4
'// 存儲(chǔ)過程名稱
.CommandText = "upGetUserInfos"
'// 設(shè)置用戶組
.Parameters.Item("@intUserGroup").Value = 1
'// 執(zhí)行存儲(chǔ)過程,和以上幾個(gè)例子不同,這里使用RecordSet的Open方法
adoRs.Open adoComm
'// 顯示第一個(gè)值
Response.write adoRs.Fields(0).Value
End With
'// 釋放對(duì)象
Set adoRs = Nothing
Set adoComm = Nothing
?
?
?
?
?
?
?
?
?
?
?
?
更多文章、技術(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ì)您有幫助就好】元
