建立並在項目中調用SQLSERVER存儲過程的簡單示例

使用SQLSERVER存儲過程能夠很大的提升程序運行速度,簡化編程維護難度,現已獲得普遍應用。
建立存儲過程
  和數據表同樣,在使用以前須要建立存儲過程,它的簡明語法是:

引用:
Create PROC 存儲過程名稱
[參數列表(多個以「,」分隔)]
AS
SQL 語句

例:

引用:
Create PROC upGetUserName
@intUserId INT,
@ostrUserName NVARCHAR(20) OUTPUT -- 要輸出的參數
AS
BEGIN
-- 將uName的值賦給 @ostrUserName 變量,即要輸出的參數
Select @ostrUserName=uName FROM uUser Where uId=@intUserId
END

  其中 Create PROC 語句(完整語句爲Create PROCEDURE)的意思就是告訴SQL SERVER,如今須要創建一個存儲過程,upGetUserName 就是存儲過程名稱,@intUserId 和 @ostrUserName 分別是該存儲過程的兩個參數,注意,在SQL SERVER中,全部用戶定義的變量都以「@」開頭,OUTPUT關鍵字表示這個參數是用來輸出的,AS以後就是存儲過程內容了。只要將以上代碼在「查詢分析器」裏執行一次,SQL SERVER就會在當前數據庫中建立一個名爲「upGetUserName」的存儲過程。你能夠打開「企業管理器」,選擇當前操做的數據庫,而後在左邊的樹型列表中選擇「存儲過程」,此時就能夠在右邊的列表中看到你剛剛建立的存儲過程了(若是沒有,刷新一下便可)。
2、存儲過程的調用

  以前已經建立了一個名爲「upGetUserName」的存儲過程,從字面理解該存儲過程的功能是用來取得某一個用戶的名稱。存儲過程創建好了,接下來就是要在應用程序裏調用了,下面看一下在ASP程序裏的調用。

引用:
Dim adoComm
’// 建立一個對象,咱們用來調用存儲過程 
Set adoComm = CreateObject("ADODB.Command")
With adoComm
’// 設置鏈接,設 adoConn 爲已經鏈接的 ADODB.Connection 對象
.ActiveConnection = adoConn
’// 類型爲存儲過程,adCmdStoredProc = 4
.CommandType = 4
’// 存儲過程名稱
.CommandText = "upGetUserName"
’// 設置用戶編號
.Parameters.Item("@intUserId").Value = 1
’// 執行存儲過程
.Execute

’// 取得從存儲過程返回的用戶名稱
Response.Write "用戶名:" & .Parameters.Item("@ostrUserName").Value
End With
’// 釋放對象
Set adoComm = Nothing

  經過以上兩步,已經能夠建立和使用簡單的存儲過程了。下面來看一個稍微複雜點的存儲過程,以進一步瞭解存儲過程的應用。
3、存儲過程的實際應用

  用戶登陸在ASP項目中常常會使用到,但使用存儲過程來作驗證可能很少,那麼作例子,寫一個簡單的用戶登陸驗證的存儲過程。

引用:
Create PROC upUserLogin
@strLoginName NVARCHAR(20),
@strLoginPwd NVARCHAR(20),
@blnReturn BIT OUTPUT
AS
-- 定義一個臨時用來保存密碼的變量
DECLARE @strPwd NVARCHAR(20)
BEGIN
-- 從表中查詢當前用戶的密碼,賦值給 @strPwd 變量,下面要對他進行比較
Select @strPwd=uLoginPwd FROM uUser Where uLoginName=@strLoginName

IF @strLoginPwd = @strPwd
BEGIN
SET @blnReturn = 1
-- 更新用戶最後登陸時間
Update uUser SET uLastLogin=GETDATE() Where uLoginName=@strLoginName
END
ELSE
SET @blnReturn = 0
END

  用戶登陸的存儲過程創建好了。注意,在一個區域內若是有多條語句時,必需使用BEGIN...END關鍵字。
引用:
Dim adoComm
’// 建立一個對象,咱們用來調用存儲過程
Set adoComm = CreateObject("ADODB.Command")
With adoComm
’// 設置鏈接,設 adoConn 爲已經鏈接的 ADODB.Connection 對象
.ActiveConnection = adoConn
’// 類型爲存儲過程,adCmdStoredProc = 4
.CommandType = 4
’// 存儲過程名稱
.CommandText = "upUserLogin"
’// 設置登陸名稱
.Parameters.Item("@strLoginName").Value = "***"
’// 設置登陸密碼
.Parameters.Item("@strLoginPwd").Value = "123456"
’// 執行存儲過程
.Execute

’// 判斷是否登陸成功
If .Parameters.Item("@blnReturn").Value = 1 Then
Response.Write "恭喜你,登陸成功!"
Else
Response.Write "不是吧,好像錯了哦。。。"
End If
End With
’// 釋放對象
Set adoComm = Nothing

  經過以上的步驟,簡單用戶登陸驗證過程也作完了,如今只要把它整合到程序中就能夠實現簡單的用戶登陸驗證了,關於其餘細節就由你本身來處理了。
  上面介紹的兩個存儲過程都是隻返回一個值的,下面咱們來看一個返回一個記錄集的存儲過程。

引用:
Create PROC upGetUserInfos
@intUserGroup INT
AS
BEGIN
-- 從數據庫中抽取符合條件的數據
Select uName,uGroup,uLastLogin FROM uUser Where uGroup=@intUserGroup
-- 插入一列合計
UNION
Select ’合計人數:’,COUNT(uGroup),NULL FROM uUser Where uGroup=@intUserGroup
END

  如今咱們來看一下ASP程序的調用。

引用:
Dim adoComm
Dim adoRt
’// 建立一個對象,咱們用來調用存儲過程
Set adoComm = CreateObject("ADODB.Command")
Set adoRs = CreateObject("ADODB.Recordset")
With adoComm
’// 設置鏈接,設 adoConn 爲已經鏈接的 ADODB.Connection 對象
.ActiveConnection = adoConn
’// 類型爲存儲過程,adCmdStoredProc = 4
.CommandType = 4
’// 存儲過程名稱
.CommandText = "upGetUserInfos"
’// 設置用戶組
.Parameters.Item("@intUserGroup").Value = 1
’// 執行存儲過程,和以上幾個例子不一樣,這裏使用RecordSet的Open方法
adoRs.Open adoComm
’// 顯示第一個值
Response.write adoRs.Fields(0).Value
End With
’// 釋放對象
Set adoRs = Nothing
Set adoComm = Nothing

最後讓咱們看看 SQL SERVER裏面如何在存儲過程裏面獲取另外一個存儲過程所返回的表的數據?

首先須要知道「另外一個存儲過程」的結果集的全部列的類型。 
假設「另外一個存儲過程」的名字是sp1,沒有參數,返回的結果集共3列,所有爲int型,那麼「存儲過程」裏添加一個與結果集列數相同的臨時表或表變量用於接收「另外一個存儲過程」的結果集以下CREATE PROCEDURE sp2ASDECLARE @t table(a int,b int,c int)INSERT INTO @t(a,b,c)EXEC sp1SELECT * FROM @t
相關文章
相關標籤/搜索