首頁 >php教程 >PHP开发 >SQL中預存程序和函數的區別

SQL中預存程序和函數的區別

高洛峰
高洛峰原創
2016-12-14 14:51:041991瀏覽

本質上沒差別。只是函數有如:只能傳回一個變數的限制。而預存程序可以傳回多個。而函數是可以嵌入在sql中使用的,可以在select中調用,而預存程序不行。執行的本質都一樣。 
     函數限制較多,例如不能用臨時表,只能用表格變數.還有一些函數都不可用等等.而儲存過程的限制相對較少 
      1.    一般來說,而儲存製程所實現的功能則複雜一點,且函數的實現的功能針對性較強。 
      2.    可將儲存程序傳回參數,而函數則只能傳回值或表物件。
      3.    儲存程序一般是作為一個獨立的部分來執行(EXEC執行),而函數可以作為查詢語句的一個部分來呼叫(SELECT呼叫),由於函數可以傳回一個表對象,因此它可以在查詢語句中位於FROM關鍵字的後方。 
      4.    當預存程序與函數執行的時候,SQL Manager會到procedure cache中去取對應的查詢語句,如果在procedure cache中沒有執行的查詢語句,SQL Manager就會對儲存程序和函式進行編譯。
      Procedure cache中保存的是執行計劃(execution plan) ,當編譯好之後就執行procedure cache中的execution plan,之後SQL SERVER會根據每個execution plan的實際情況來考慮是否要在cache中保存這個,plan評判的標準一個是這個execution plan可能被使用的頻率;其次是產生這個plan的代價,也就是編譯的耗時。保存在cache中的plan在下次執行時就不用再編譯了。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn