直播中
As
Delect From Employee Where Job_ID=1
如果我們要?jiǎng)h除指定的 Job_ID該怎么辦呢?,這時(shí)我們需要給這個(gè)StoredProcedure輸入的參數(shù)。
Create Procedure Del_User1
@intID int
As
Delect From Employee Where Job_Id = @intID
好了,這里的@intJob就是一個(gè)輸入的參數(shù),它可以從外部接受輸入的值,下面是給它輸入的asp程序:
set conn=Server.CreateObject("ADODB.Connection")
set comm=Server.CreateObject("ADODB.Command")
conn.ConnectionString="Driver={SQL Server};Server=ser;"& _
"uid=sa;pass=;database=employee "
conn.open
comm.ActiveConnection=conn
comm.CommandType=adCmdStoredProc
comm.CommandType="Del_User1"
"這里的名字就是前面在SQL Server中定義過(guò)的StoredProcedure的名字。
"下面就是參數(shù)的輸入
param=comm.CreateParameter("ID",adInt,adParamInput,4)
"這里的adParamInput定義是最重要的。
Param.Value=1 "這里的值可以輸入你想要的值,也可以用Request來(lái)獲得
Comm.Parameters.Append param
Comm.Execute
這樣我們就可以向StoredProcedure傳遞參數(shù)了。有時(shí)在一個(gè)StoredProcedure中,還存在有輸出的參數(shù),下面是一個(gè)例子它返回一個(gè)Job_ID確定的Fri_Name的值
Create Procedure Get_fName
@intID int
@fName varChar Output "說(shuō)明為輸出的參數(shù)
As
Select @fName = Fri_Name Where Job_ID = @intID
它相應(yīng)的asp程序也要改寫(xiě)為下面的形式
set conn=Server.CreateObject("ADODB.Connection")
set comm=Server.CreateObject("ADODB.Command")
conn.ConnectionString="Driver={SQL Server};Server=ser;"&_
"uid=sa;psss=;database=employee"
conn.open
comm.ActiveConnection=conn
comm.CommandType=adCmdStoredProc
comm.CommandType="Get_fName"
"這里的名字就是前面定義過(guò)的StoredProcedure的名字。
"下面就是參數(shù)的輸入
param=comm.CreateParameter("ID",adInt,adParamInput,4)
"這里的adParamInput定義是最重要的。
Param.Value=2 "這里的值可以輸入你想要的值,也可以用Request來(lái)獲得
Comm.Parameters.Append param
param=comm.CreateParameter("fName",adVarchar,adParamOutput,255,"")
"這里的adParamOutput定義是最重要的。說(shuō)明它是一個(gè)輸出的參數(shù),默認(rèn)的值 為一空的字符串
comm.Parameters.Append param
Comm.Execute
Response.Write "Job_Id為"¶m(0)&"的員工的首姓為"¶m(1)
我給大家簡(jiǎn)單介紹了一下StoredProcedure的基本概念,但StoredProcedure比較復(fù)雜,如果你想進(jìn)一步的深入,必須對(duì)SQL Server的結(jié)構(gòu)體系有全面的了解。另外,我們并沒(méi)有在上面的里子中體會(huì)到StoredProcedure的優(yōu)勢(shì),很多人會(huì)認(rèn)為那還不如用普通的方法,其實(shí)在構(gòu)建很多企業(yè)級(jí)的應(yīng)用時(shí)才能夠體會(huì)到用StoredProcedure的強(qiáng)大和必要性,這里我舉一個(gè)簡(jiǎn)單的例子。一個(gè)網(wǎng)絡(luò)銀行的數(shù)據(jù)庫(kù)(onLoan)中有兩個(gè)相關(guān)的表Loan表和LoanHistory表,loan表用于記錄貸款的信息,而每一筆貸款的記錄在Loan表中登記后都必須在LoanHistory表中登記,因?yàn)槎ㄆ诘慕Y(jié)算都是使用LoanHistory表的。你也許會(huì)說(shuō)那很好辦啊。用兩個(gè)Insert Into語(yǔ)句分別向兩個(gè)表中插入記錄不就行了嗎!但要注意的是在這個(gè)應(yīng)用中,若記錄在任何的一個(gè)表中插入失敗都必須將整個(gè)的過(guò)程給取消(也就是一個(gè)事務(wù)的取消),那么若僅簡(jiǎn)單的使用兩個(gè)Insert Into語(yǔ)句的話(huà),若是在第一個(gè)語(yǔ)句執(zhí)行完畢后,在第二個(gè)語(yǔ)句尚未完成時(shí)就發(fā)生了故障,這時(shí)第一個(gè)語(yǔ)句產(chǎn)生的效果是沒(méi)法消除的了。如果我們將這整個(gè)的過(guò)程定義為一個(gè)事務(wù),事務(wù)沒(méi)有完整的結(jié)束就Roll Back所有的影響不就達(dá)到了要求嗎?這在SQL Server中可以用Begin Transaction和Commit Transaction來(lái)完成的,例子如下:
Create StoredProcedure insert_loan
As
Begin transaction
Inset into Loan (Loan_ID,Loan_Data,Loan_amount)
Values(?,?,?)
Inset into Loan (Loan_ID,Loan_Data,Loan_amount,Loan_Describle)
Values(?,?,?,?)
Commit Transaction
好了,這看上去好象沒(méi)有什么不同吧,但需要注意的是我們現(xiàn)在將兩個(gè)Insert into語(yǔ)句作為了一個(gè)的事務(wù)來(lái)處理,只有兩個(gè)Insert into語(yǔ)句都完成的話(huà)才是一個(gè)整體的事務(wù)結(jié)束,那么它才會(huì)去作用這個(gè)數(shù)據(jù)庫(kù)中的兩個(gè)表,若在事務(wù)中發(fā)生了故障的話(huà),則所有的影響將取消(Roll Back)。好了,這樣的處理是只有在SQL Server中用StoredProcedure才能完成的。ANSI的SQL當(dāng)然就不行了。這里講的大家可能不太明白,你可以參看SQL Server的手冊(cè)來(lái)作更多的了解。
下面我們來(lái)看最后的一個(gè)對(duì)象─RecordSet對(duì)象,也是屬性和方法最多的一個(gè)了。我們使用的頻率也是最高的一個(gè),在這之后,我還想談?wù)凙DO與ORACLE的一些問(wèn)題。