本質上沒差別。只是函數有如:只能傳回一個變數的限制。而預存程序可以傳回多個。而函數是可以嵌入在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在下次執行時就不用再編譯了。