国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

sql存儲過程的使用和介紹

2024-08-31 00:44:04
字體:
來源:轉載
供稿:網友

sql server存儲過程語法

定義總是很抽象。存儲過程其實就是能完成一定操作的一組SQL語句,只不過這組語句是放在數據庫中的(這里我們只談SQL Server)。如果我們通過創建存儲過程以及在ASP中調用存儲過程,就可以避免將SQL語句同ASP代碼混雜在一起。這樣做的好處至少有三個:
第一、大大提高效率。存儲過程本身的執行速度非常快,而且,調用存儲過程可以大大減少同數據庫的交互次數。
第二、提高安全性。假如將SQL語句混合在ASP代碼中,一旦代碼失密,同時也就意味著庫結構失密。
第三、有利于SQL語句的重用。

在ASP中,一般通過command對象調用存儲過程,根據不同情況,本文也介紹其它調用方法。為了方便說明,根據存儲過程的輸入輸出,作以下簡單分類:
1. 只返回單一記錄集的存儲過程
假設有以下存儲過程(本文的目的不在于講述T-SQL語法,所以存儲過程只給出代碼,不作說明):

復制代碼 代碼如下:


/*SP1*/
CREATE PROCEDURE dbo.getUserList
as
set nocount on
begin
select * from dbo.[userinfo]
end
go


以上存儲過程取得userinfo表中的所有記錄,返回一個記錄集。通過command對象調用該存儲過程的ASP代碼如下:

'**通過Command對象調用存儲過程**

復制代碼 代碼如下:


DIM MyComm,MyRst
Set MyComm = Server.CreateObject("ADODB.Command")
MyComm.ActiveConnection = MyConStr'MyConStr是數據庫連接字串
MyComm.CommandText= "getUserList"'指定存儲過程名
MyComm.CommandType= 4'表明這是一個存儲過程
MyComm.Prepared= true'要求將SQL命令先行編譯
Set MyRst = MyComm.Execute
Set MyComm = Nothing


存儲過程取得的記錄集賦給MyRst,接下來,可以對MyRst進行操作。
在以上代碼中,CommandType屬性表明請求的類型,取值及說明如下:
-1 表明CommandText參數的類型無法確定

1 表明CommandText是一般的命令類型
2 表明CommandText參數是一個存在的表名稱
4 表明CommandText參數是一個存儲過程的名稱

還可以通過Connection對象或Recordset對象調用存儲過程,方法分別如下:

'**通過Connection對象調用存儲過程**

復制代碼 代碼如下:


DIM MyConn,MyRst
Set MyConn = Server.CreateObject("ADODB.Connection")
MyConn.open MyConStr'MyConStr是數據庫連接字串
Set MyRst = MyConn.Execute("getUserList",0,4) '最后一個參斷含義同CommandType
Set MyConn = Nothing

'**通過Recordset對象調用存儲過程**
DIM MyRst
Set MyRst = Server.CreateObject("ADODB.Recordset")
MyRst.open "getUserList",MyConStr,0,1,4
'MyConStr是數據庫連接字串,最后一個參斷含義與CommandType相同



2. 沒有輸入輸出的存儲過程
請看以下存儲過程:

復制代碼 代碼如下:


/*SP2*/
CREATE PROCEDURE dbo.delUserAll
as
set nocount on
begin
delete from dbo.[userinfo]
end
go


該存儲過程刪去userinfo表中的所有記錄,沒有任何輸入及輸出,調用方法與上面講過的基本相同,只是不用取得記錄集:

'**通過Command對象調用存儲過程**

復制代碼 代碼如下:


DIM MyComm
Set MyComm = Server.CreateObject("ADODB.Command")
MyComm.ActiveConnection = MyConStr'MyConStr是數據庫連接字串
MyComm.CommandText= "delUserAll"'指定存儲過程名
MyComm.CommandType= 4'表明這是一個存儲過程
MyComm.Prepared= true'要求將SQL命令先行編譯
MyComm.Execute'此處不必再取得記錄集

Set MyComm = Nothing


當然也可通過Connection對象或Recordset對象調用此類存儲過程,不過建立Recordset對象是為了取得記錄集,在沒有返回記錄集的情況下,還是利用Command對象吧。


3. 有返回值的存儲過程
在進行類似SP2的操作時,應充分利用SQL Server強大的事務處理功能,以維護數據的一致性。并且,我們可能需要存儲過程返回執行情況,為此,將SP2修改如下:

復制代碼 代碼如下:


/*SP3*/
CREATE PROCEDURE dbo.delUserAll
as
set nocount on
begin
BEGIN TRANSACTION
delete from dbo.[userinfo]
IF @@error=0
begin
COMMIT TRANSACTION
return 1
end
ELSE
begin
ROLLBACK TRANSACTION
return 0
end
return
end
go


以上存儲過程,在delete順利執行時,返回1,否則返回0,并進行回滾操作。為了在ASP中取得返回值,需要利用Parameters集合來聲明參數:

復制代碼 代碼如下:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 通江县| 平昌县| 报价| 武城县| 张家港市| 台南县| 长兴县| 微山县| 南康市| 新兴县| 秦安县| 甘孜| 凤山市| 禹城市| 柳林县| 昌图县| 迁西县| 布尔津县| 商河县| 乌恰县| 宜城市| 外汇| 台安县| 苍梧县| 广安市| 兰坪| 海盐县| 福建省| 淄博市| 女性| 治多县| 岚皋县| 茂名市| 双牌县| 错那县| 剑阁县| 临夏市| 吉木萨尔县| 藁城市| 苏尼特左旗| 康乐县|