成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

數據庫中存儲過程和函數的區別

開發
存儲過程(Stored Procedure)是一組為了完成特定功能的SQL語句集,是利用SQL Server所提供的Transact-SQL語言所編寫的程序。本文主要介紹存儲過程和函數的區別,希望對你有幫助,一起來看。

函數限制比較多,如不能用臨時表,只能用表變量等,而存儲過程的限制相對就比較少。

1.一般來說,存儲過程實現的功能要復雜一點,而函數的實現的功能針對性比較強。

2.對于存儲過程來說可以返回參數,而函數只能返回值或者表對象。

3.存儲過程一般是作為一個獨立的部分來執行,而函數可以作為查詢語句的一個部分來調用,由于函數可以返回一個表對象,因此它可以在查詢語句中位于FROM關鍵字的后面。

4.當存儲過程和函數被執行的時候,SQLManager會到procedurecache中去取相應的查詢語句,如果在procedurecache里沒有相應的查詢語句,SQLManager就會對存儲過程和函數進行編譯。

Procedurecache:中保存的是執行計劃,當編譯好之后就執行procedurecache中的executionplan,之后SQLSERVER會根據每個executionplan的實際情況來考慮是否要在cache中保存這個plan,評判的標準一個是這個executionplan可能被使用的頻率;其次是生成這個plan的代價,也就是編譯的耗時。保存在cache中的plan在下次執行時就不用再編譯了。

存儲過程和函數具體的區別:

存儲過程:可以使得對的管理、以及顯示關于及其用戶信息的工作容易得多。存儲過程是SQL語句和可選控制流語句的預編譯集合,以一個名稱存儲并作為一個單元處理。存儲過程存儲在數據庫內,可由應用程序通過一個調用執行,而且允許用戶聲明變量、有條件執行以及其它強大的編程功能。存儲過程可包含程序流、邏輯以及對數據庫的查詢。它們可以接受參數、輸出參數、返回單個或多個結果集以及返回值。

可以出于任何使用SQL語句的目的來使用存儲過程,它具有以下優點:

(1)功能強大,限制少。

(2)可以在單個存儲過程中執行一系列SQL語句。

(3)可以從自己的存儲過程內引用其它存儲過程,這可以簡化一系列復雜語句。

(4)存儲過程在創建時即在上進行編譯,所以執行起來比單個SQL語句快。

(5)可以有多個返回值,即多個輸出參數,并且可以使用SELECT返回結果集。

函數:是由一個或多個SQL語句組成的子程序,可用于封裝代碼以便重新使用。自定義函數諸多限制,有許多語句不能使用,許多功能不能實現。函數可以直接引用返回值,用表變量返回記錄集。但是,用戶定義函數不能用于執行一組修改全局數據庫狀態的操作。

補充:

前面有一句,“可以處于任何使用SQL語句的目的來使用存儲過程”。這里想說的是,有些時候有些地方使用函數或許會更方便些。例如,存在這樣一個表:Temperature(Year,Month,Day,T02,T08,T14,T20),其中Year,Month,Day是時間字段,T02,T08,T14,T20是指2時、8時、14時、20時四個時刻對應的溫度值,這些溫度值可為空?,F在,要求統計2008年5月份的平均溫度。

或許大家會這樣寫:

 

SELECT(AVG(T02)+AVG(T08)+AVG(T14)+AVG(T20))/4FROMTemperatureWHEREYear=2008ANDMonth=5

 

如果不考慮空值的話,這樣完全正確,但是考慮空值的話,如果根本沒有統計02時的溫度,那么AVG(T02)將為NULL,然后進行所有運算的結果都將為NULL。這顯然是不正確的。

這里可以創建一個自定義函數,然后使用一個SELECT語句即可查詢:

 

SELECTAVG(user.Average(T02,T08,T14,T20)FROMTemperatureWHEREYear=2008ANDMonth=5

 

總結:

用戶自定義函數在處理同一數據行中的各個字段時,特別方便有用。雖然這里使用存儲過程也能達到查詢目的,但是顯然沒有使用函數方便。而且,即使使用存儲過程也無法處理SELECT查詢中的同一數據行中的各個字段的運算。因為存儲過程不返回值,使用時只能單獨調用;而函數卻能出現在能放置表達式的任何位置。

【編輯推薦】

  1. 講解SQL Server數據庫中函數的使用方法
  2. 精品文章 論C++構造函數中的不合理設計
  3. SQL Server的函數庫漏洞
  4. 講解Sybase存儲過程的建立和使用
  5. mysql5存儲過程編寫實踐
責任編輯:于鐵 來源: 新浪博客
相關推薦

2019-04-30 15:28:46

數據庫存儲過程觸發器

2009-09-11 15:12:26

LINQ執行存儲過程

2010-09-10 16:12:08

sql函數判斷

2011-06-03 10:50:27

Java

2010-04-16 14:10:56

Oracle數據庫

2010-09-06 15:41:34

SQL函數存儲過程

2010-10-14 13:18:55

MySQL存儲過程

2010-10-25 13:48:26

Oracle過程

2010-09-06 11:05:05

SQL SERVER語句

2019-06-20 15:25:14

MySQLL數據庫存儲

2010-09-10 15:11:07

SQLGetKey函數

2024-01-19 09:37:19

MySQL數據庫

2018-12-26 15:00:56

數據庫行式存儲列式存儲

2019-08-27 15:00:09

MySQL數據庫存儲

2010-11-29 11:27:08

oracle創建存儲過

2010-04-16 13:34:00

Oracle Java

2018-11-05 15:14:42

MySQL編程語言技術

2010-09-02 11:24:45

SQL刪除

2023-02-28 11:29:09

存儲函數MySQL

2010-12-10 16:19:04

JDBC數據庫連接池DDLSQLJ存儲過程
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久久久免费毛片精品 | 综合国产 | 三级av在线| 中文字幕亚洲精品 | 亚洲午夜电影 | 成人av电影免费在线观看 | 国产精品久久久亚洲 | 欧美一级淫片免费视频黄 | 久久久久91| 自拍偷拍欧美 | 国产九九av| 九九九久久国产免费 | 国产农村一级国产农村 | av片毛片 | 怡红院成人在线视频 | 国产成人精品一区二区三区 | 九九热免费观看 | 欧美激情久久久 | 在线视频中文字幕 | 正在播放国产精品 | 久久久久国产精品午夜一区 | 在线色网 | 国产欧美日韩一区 | 户外露出一区二区三区 | 免费观看毛片 | 国产成人av一区二区三区 | 男人的天堂久久 | 在线天堂免费中文字幕视频 | 国产农村妇女毛片精品久久麻豆 | 国产精品三级久久久久久电影 | 久久久妇女国产精品影视 | 日韩在线播放一区 | k8久久久一区二区三区 | 羞羞视频网站免费观看 | 毛片综合 | 国产成人精品a视频 | www成人免费| 久久av一区二区 | 在线日韩 | 黑人成人网 | a级黄色毛片免费播放视频 国产精品视频在线观看 |