<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    一路拾遺
    Collect By Finding All The Way ......
    posts - 81,comments - 41,trackbacks - 0
            sql語句執(zhí)行的時候要先編譯,然后執(zhí)行。存儲過程(Stored Procedure)是一組為了完成特定功能的SQL語句集,經(jīng)編譯后存儲在數(shù)據(jù)庫中。用戶通過指定存儲過程的名字并給出參數(shù)(如果該存儲過程帶有參數(shù))來執(zhí)行它。存儲過程是數(shù)據(jù)庫中的一個重要對象,任何一個設(shè)計良好的數(shù)據(jù)庫應(yīng)用程序都應(yīng)該用到存儲過程。
      一、存儲過程介紹
      存儲過程是由流控制和SQL語句書寫的過程,這個過程經(jīng)編譯和優(yōu)化后存儲在數(shù)據(jù)庫服務(wù)器中,應(yīng)用程序使用時只要調(diào)用即可。在ORACLE中,若干個有聯(lián)系的過程可以組合在一起構(gòu)成程序包。
      存儲過程是利用SQL Server所提供的Tranact-SQL語言所編寫的程序。Tranact-SQL語言是SQL Server提供專為設(shè)計數(shù)據(jù)庫應(yīng)用程序的語言,它是應(yīng)用程序和SQL Server數(shù)據(jù)庫間的主要程序式設(shè)計界面。它好比Oracle數(shù)據(jù)庫系統(tǒng)中的Pro-SQL和Informix的數(shù)據(jù)庫系統(tǒng)能夠中的Informix- 4GL語言一樣。這類語言主要提供以下功能,讓用戶可以設(shè)計出符合引用需求的程序:
      1)、變量說明
      2)、ANSI兼容的SQL命令(如Select,Update….)
      3)、一般流程控制命令(if…else…、while….)
      4)、內(nèi)部函數(shù)
      二、使用存儲過程有以下的優(yōu)點:
      * 存儲過程的能力大大增強了SQL語言的功能和靈活性。存儲過程可以用流控制語句編寫,有很強的靈活性,可以完成復(fù)雜的判斷和較復(fù)雜的 運算。
      * 可保證數(shù)據(jù)的安全性和完整性。
      # 通過存儲過程可以使沒有權(quán)限的用戶在控制之下間接地存取數(shù)據(jù)庫,從而保證數(shù)據(jù)的安全。
      # 通過存儲過程可以使相關(guān)的動作在一起發(fā)生,從而可以維護數(shù)據(jù)庫的完整性。
      * 再運行存儲過程前,數(shù)據(jù)庫已對其進行了語法和句法分析,并給出了優(yōu)化執(zhí)行方案。這種已經(jīng)編譯好的過程可極大地改善SQL語句的性能。由于執(zhí)行SQL語句的大部分工作已經(jīng)完成,所以存儲過程能以極快的速度執(zhí)行。
      * 可以降低網(wǎng)絡(luò)的通信量。
      * 使體現(xiàn)企業(yè)規(guī)則的運算程序放入數(shù)據(jù)庫服務(wù)器中,以便:
      # 集中控制。
      # 當(dāng)企業(yè)規(guī)則發(fā)生變化時在服務(wù)器中改變存儲過程即可,無須修改任何應(yīng)用程序。企業(yè)規(guī)則的特點是要經(jīng)常變化,如果把體現(xiàn)企業(yè)規(guī)則的運算程序放入應(yīng)用程序中,則當(dāng)企業(yè)規(guī)則發(fā)生變化時,就需要修改應(yīng)用程序工作量非常之大(修改、發(fā)行和安裝應(yīng)用程序)。如果把體現(xiàn)企業(yè)規(guī)則的運算放入存儲過程中,則當(dāng)企業(yè)規(guī)則發(fā)生變化時,只要修改存儲過程就可以了,應(yīng)用程序無須任何變化。
      三、存儲過程的種類:
      1)、系統(tǒng)存儲過程:以sp_開頭,用來進行系統(tǒng)的各項設(shè)定.取得信息.相關(guān)管理工作,
      如 sp_help就是取得指定對象的相關(guān)信息
      2)、擴展存儲過程以XP_開頭,用來調(diào)用操作系統(tǒng)提供的功能
      exec master..xp_cmdshell 'ping 10.8.16.1'
      3)、用戶自定義的存儲過程,這是我們所指的存儲過程
      四、存儲過程的書寫格式:
      CREATE PROCEDURE [擁有者.]存儲過程名[;程序編號]
      [(參數(shù)#1,…參數(shù)#1024)]
      [WITH
      {RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}
      ]
      [FOR REPLICATION]
      AS 程序行
      其中存儲過程名不能超過128個字。每個存儲過程中最多設(shè)定1024個參數(shù)
      (SQL Server 7.0以上版本),參數(shù)的使用方法如下:
      @參數(shù)名 數(shù)據(jù)類型 [VARYING] [=內(nèi)定值] [OUTPUT]
      每個參數(shù)名前要有一個“@”符號,每一個存儲過程的參數(shù)僅為該程序內(nèi)部使用,參數(shù)的類型除了IMAGE外,其他SQL Server所支持的數(shù)據(jù)類型都可使用。
      [=內(nèi)定值]相當(dāng)于我們在建立數(shù)據(jù)庫時設(shè)定一個字段的默認值,這里是為這個參數(shù)設(shè)定默認值。[OUTPUT]是用來指定該參數(shù)是既有輸入又有輸出值的,也就是在調(diào)用了這個存儲過程時,如果所指定的參數(shù)值是我們需要輸入的參數(shù),同時也需要在結(jié)果中輸出的,則該項必須為OUTPUT,而如果只是做輸出參數(shù)用,可以用CURSOR,同時在使用該參數(shù)時,必須指定VARYING和OUTPUT這兩個語句。
      例子:
      CREATE PROCEDURE order_tot_amt @o_id int,@p_tot int output AS
      SELECT @p_tot = sum(Unitprice*Quantity)
      FROM orderdetails
      WHERE ordered=@o_id
      例子說明:
      該例子是建立一個簡單的存儲過程order_tot_amt,這個存儲過程根據(jù)用戶輸入的定單ID號碼(@o_id),由定單明細表 (orderdetails)中計算該定單銷售總額[單價(Unitprice)*數(shù)量(Quantity)],這一金額通過@p_tot這一參數(shù)輸出給調(diào)用這一存儲過程的程序。
    posted on 2008-12-04 10:31 胖胖泡泡 閱讀(138) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 羞羞的视频在线免费观看| 亚洲精品欧洲精品| 国产成人亚洲综合无| 成人毛片免费播放| 亚洲中文精品久久久久久不卡| 在线看片韩国免费人成视频| 性xxxx黑人与亚洲| 免费被黄网站在观看| 羞羞视频免费网站含羞草| 亚洲成网777777国产精品| 一区在线免费观看| 久久精品亚洲综合一品| 免费人成在线观看网站品爱网 | 特级毛片全部免费播放a一级| 精品国产免费观看一区| 国产精品亚洲综合一区在线观看| 免费夜色污私人影院在线观看| 无码的免费不卡毛片视频| 国产亚洲AV夜间福利香蕉149 | 日本免费一区二区在线观看| 91亚洲精品视频| 欧美大尺寸SUV免费| 校园亚洲春色另类小说合集| 亚洲精品视频在线看| 黄网站色视频免费在线观看的a站最新| 亚洲av之男人的天堂网站| www.黄色免费网站| 婷婷亚洲综合一区二区| 亚洲综合AV在线在线播放| 88xx成人永久免费观看| 亚洲精品9999久久久久无码| 免费国产成人午夜电影| a视频在线免费观看| 亚洲人成高清在线播放| 亚洲精品美女久久久久99小说| 成人影片一区免费观看| 亚洲资源最新版在线观看| 中文字幕亚洲无线码a| 亚洲视频在线观看免费视频| 精品国产亚洲第一区二区三区 | 亚洲国产精品激情在线观看|