好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識(shí)庫 > sql存儲(chǔ)過程的使用和介紹

sql存儲(chǔ)過程的使用和介紹

熱門標(biāo)簽:承德地圖標(biāo)注公司名需要花錢嗎 北京400電話辦理多少錢 電銷外呼系統(tǒng)軟件功能 榕城市地圖標(biāo)注 慶陽地圖標(biāo)注 咸陽電腦外呼系統(tǒng)運(yùn)營商 怎么給高德做地圖標(biāo)注 美團(tuán)地圖標(biāo)注商戶認(rèn)證注冊(cè) 浙江穩(wěn)定外呼系統(tǒng)供應(yīng)商

sql server存儲(chǔ)過程語法

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

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

復(fù)制代碼 代碼如下:

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

    以上存儲(chǔ)過程取得userinfo表中的所有記錄,返回一個(gè)記錄集。通過command對(duì)象調(diào)用該存儲(chǔ)過程的ASP代碼如下:

    '**通過Command對(duì)象調(diào)用存儲(chǔ)過程**
復(fù)制代碼 代碼如下:

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

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

     1    表明CommandText是一般的命令類型
      2    表明CommandText參數(shù)是一個(gè)存在的表名稱
      4    表明CommandText參數(shù)是一個(gè)存儲(chǔ)過程的名稱

    還可以通過Connection對(duì)象或Recordset對(duì)象調(diào)用存儲(chǔ)過程,方法分別如下:

    '**通過Connection對(duì)象調(diào)用存儲(chǔ)過程**

復(fù)制代碼 代碼如下:

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

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



    2. 沒有輸入輸出的存儲(chǔ)過程
    請(qǐng)看以下存儲(chǔ)過程:
復(fù)制代碼 代碼如下:

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

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

    '**通過Command對(duì)象調(diào)用存儲(chǔ)過程**

復(fù)制代碼 代碼如下:

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

    Set MyComm = Nothing


    當(dāng)然也可通過Connection對(duì)象或Recordset對(duì)象調(diào)用此類存儲(chǔ)過程,不過建立Recordset對(duì)象是為了取得記錄集,在沒有返回記錄集的情況下,還是利用Command對(duì)象吧。


    3. 有返回值的存儲(chǔ)過程
    在進(jìn)行類似SP2的操作時(shí),應(yīng)充分利用SQL Server強(qiáng)大的事務(wù)處理功能,以維護(hù)數(shù)據(jù)的一致性。并且,我們可能需要存儲(chǔ)過程返回執(zhí)行情況,為此,將SP2修改如下:

復(fù)制代碼 代碼如下:

    /*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

    以上存儲(chǔ)過程,在delete順利執(zhí)行時(shí),返回1,否則返回0,并進(jìn)行回滾操作。為了在ASP中取得返回值,需要利用Parameters集合來聲明參數(shù):
復(fù)制代碼 代碼如下:

    '**調(diào)用帶有返回值的存儲(chǔ)過程并取得返回值**
    DIM MyComm,MyPara
    Set MyComm = Server.CreateObject("ADODB.Command")
    MyComm.ActiveConnection = MyConStr          'MyConStr是數(shù)據(jù)庫連接字串
    MyComm.CommandText      = "delUserAll"      '指定存儲(chǔ)過程名
    MyComm.CommandType      = 4                 '表明這是一個(gè)存儲(chǔ)過程
    MyComm.Prepared         = true              '要求將SQL命令先行編譯
    '聲明返回值
    Set Mypara = MyComm.CreateParameter("RETURN",2,4)

    MyComm.Parameters.Append MyPara
    MyComm.Execute
    '取得返回值
    DIM retValue
    retValue = MyComm(0)    '或retValue = MyComm.Parameters(0)
    Set MyComm = Nothing

  
    在MyComm.CreateParameter("RETURN",2,4)中,各參數(shù)的含義如下:
    第一個(gè)參數(shù)("RETURE")為參數(shù)名。參數(shù)名可以任意設(shè)定,但一般應(yīng)與存儲(chǔ)過程中聲明的參數(shù)名相同。此處是返回值,我習(xí)慣上設(shè)為"RETURE";
    第二個(gè)參數(shù)(2),表明該參數(shù)的數(shù)據(jù)類型,具體的類型代碼請(qǐng)參閱ADO參考,以下給出常用的類型代碼:
    adBigInt: 20 ;
    adBinary : 128 ;
    adBoolean: 11 ;
    adChar: 129 ;
    adDBTimeStamp: 135 ;
    adEmpty: 0 ;
    adInteger: 3 ;
    adSmallInt: 2 ;
    adTinyInt: 16 ;
    adVarChar: 200 ;
    對(duì)于返回值,只能取整形,且-1到-99為保留值;
    第三個(gè)參數(shù)(4),表明參數(shù)的性質(zhì),此處4表明這是一個(gè)返回值。此參數(shù)取值的說明如下:
    0 : 類型無法確定; 1: 輸入?yún)?shù);2: 輸入?yún)?shù);3:輸入或輸出參數(shù);4: 返回值

    以上給出的ASP代碼,應(yīng)該說是完整的代碼,也即最復(fù)雜的代碼,其實(shí)
復(fù)制代碼 代碼如下:

    Set Mypara = MyComm.CreateParameter("RETURN",2,4)
    MyComm.Parameters.Append MyPara
 
     
    可以簡化為
復(fù)制代碼 代碼如下:

    MyComm.Parameters.Append MyComm.CreateParameter("RETURN",2,4)

    甚至還可以繼續(xù)簡化,稍后會(huì)做說明。
    對(duì)于帶參數(shù)的存儲(chǔ)過程,只能使用Command對(duì)象調(diào)用(也有資料說可通過Connection對(duì)象或Recordset對(duì)象調(diào)用,但我沒有試成過)。


    4. 有輸入?yún)?shù)和輸出參數(shù)的存儲(chǔ)過程
    返回值其實(shí)是一種特殊的輸出參數(shù)。在大多數(shù)情況下,我們用到的是同時(shí)有輸入及輸出參數(shù)的存儲(chǔ)過程,比如我們想取得用戶信息表中,某ID用戶的用戶名,這時(shí)候,有一個(gè)輸入?yún)?shù)----用戶ID,和一個(gè)輸出參數(shù)----用戶名。實(shí)現(xiàn)這一功能的存儲(chǔ)過程如下:

復(fù)制代碼 代碼如下:

    /*SP4*/
    CREATE PROCEDURE dbo.getUserName
       @UserID int,
       @UserName varchar(40) output
    as
    set nocount on
    begin
       if @UserID is null return
       select @UserName=username
           from dbo.[userinfo]

04017PIXTEL_MMI_EBOOK_2005>17                                                          /PIXTEL_MMI_EBOOK_2005>

標(biāo)簽:重慶 呼和浩特 新鄉(xiāng) 上海 拉薩 江蘇 昭通 貴州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《sql存儲(chǔ)過程的使用和介紹》,本文關(guān)鍵詞  sql,存儲(chǔ),過程,的,使用,和,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《sql存儲(chǔ)過程的使用和介紹》相關(guān)的同類信息!
  • 本頁收集關(guān)于sql存儲(chǔ)過程的使用和介紹的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 女自慰无套?免费网站AI换脸| AV第一福利大全导航| 91久久香蕉国产熟女线看麻豆| 国内三级free性hd| 国产精品久久久久无码AV铜川 | 裙子下面是野兽哔哩哔哩| 丰满富婆一级A片外国电影| 免费??成人???视频| 欧美a在线视频| 快穿高h喷水荡肉爽文校园| qq免费看片v群| 黄瓜视频成人A片入口| 性色XXⅩXX乱女少妇内谢| 久久青青成人亚洲精品| 精品无码久久久久久动漫| 美女隐私网站免费软件大全| 国产一区二| 韩国电影一区二区| 中文字幕人妻在线一区| 国产又黄又湿又刺激不卡网站| 日韩午夜小电影| 男人扒女人衣服摸身体视频| 男女性接交无遮挡免费看视频| 哭着求饶颤抖不停下h| 国产精品天天看天天做夜夜爽| 亚洲丰满少妇浓密毛茸茸| 欧美丰满熟妇XXXX喷水| 免费毛片网站在线观看| 精品日韩视频| 精品久久香蕉国产线观看亚洲内容 | 性拳头宫颈被拽出玩小说| 19国产精品麻豆免费观看| 日批视频免费看| 天天干天天舔| 老鸭窝毛片| 成人精品久久久一区二区三区小说| 欧美一级纯片免费观看| 美女赤身裸体扒开双腿一区二区| 精品亚洲AV高清一区二区| b站黄页| 秋霞啪啪网|