存儲過程和函數的使用心得


今天晚上順便看了些網上的資料,覺 得以下分析比較合理:
1.一般來說,存儲過程實現的功能要復雜一點,而函數的實現的功能針對性比較強。
2.對于存儲過程來說可以返回參數,而函數只能返回值或者表對象。
3.存儲過程一般是作為一個獨立的部分來執行,而函數可以作為查詢語句的一個部分來調用,由于函數可以返回一個表對象,因此它可以在查詢語句中位于FROM關鍵字的后面。
4.當存儲過程和函數被執行的時候,SQLManager會到procedurecache中去取相應的查詢語句,如果在procedurecache里沒有相應的查詢語句,SQLManager就會對存儲過程和函數進行編譯。
Procedurecache 中保存的是執行計划(executionplan),當編譯好之后就執行procedurecache中的executionplan,之后 SQLSERVER會根據每個executionplan的實際情況來考慮是否要在cache中保存這個plan,評判的標准一個是這個 executionplan可能被使用的頻率;其次是生成這個plan的代價,也就是編譯的耗時。保存在cache中的plan在下次執行時就不用再編 譯了。


  • 存儲過程,功能強大,可以執行包括修改表等一系列數據庫操作,也可以創建為 SQL Server 啟動時自動運行的存儲過程。

  • 自定義函數,用戶定義函數不能用于執行一組修改全局數據庫狀態的操作。



  • 存儲過程,可以使用非確定函數。

  • 自定義函數,不允許在用戶定義函數主體中內置非确定函数



  • 存儲過程,可返回記錄集。

  • 自定義函數,可以返回表變量。



  • 存儲過程,其返回值不能被直接引用。

  • 自定義函數,其返回值可以被直接引用。



  • 存儲過程,用 EXECUTE 語句執行。

  • 自定義函數,在查詢語句中調用。


posted on 2009-02-27 21:18  wanghuaide  阅读(155)  评论(0编辑  收藏  举报

导航