當前位置:編程學習大全網 - 編程語言 - SQL SERVER裏面如何在存儲過程裏面獲取另壹個存儲過程所返回的表的數據?

SQL SERVER裏面如何在存儲過程裏面獲取另壹個存儲過程所返回的表的數據?

首先需要知道“另壹個存儲過程”的結果集的所有列的類型。

假設“另壹個存儲過程”的名字是sp1,沒有參數,返回的結果集***3列,全部為int型,那麽“存儲過程”裏添加壹個與結果集列數相同的臨時表或表變量用於接收“另壹個存儲過程”的結果集

如下

CREATE PROCEDURE sp2

AS

DECLARE @t table(a int,b int,c int)

INSERT INTO @t(a,b,c)

EXEC sp1

SELECT * FROM @t

使用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”的存儲過程。妳可以打開“企業管理器”,選擇當前操作的數據庫,然後在左邊的樹型列表中選擇“存儲過程”,此時就可以在右邊的列表中看到妳剛剛創建的存儲過程了(如果沒有,刷新壹下即可)。

二、存儲過程的調用

之前已經創建了壹個名為“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

通過以上兩步,已經可以創建和使用簡單的存儲過程了。下面來看壹個稍微復雜點的存儲過程,以進壹步了解存儲過程的應用。

三、存儲過程的實際應用

用戶登錄在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

  • 上一篇:用java寫壹個程序?
  • 下一篇:求matlab彩色圖片的顏色特征提取算法的代碼,和紋理特征提取的代碼。傳統方法即可。
  • copyright 2024編程學習大全網