2010-06-25 79 views
6

存儲過程和函數之間有什麼區別。存儲過程和函數

每當有更多的輸入,輸出參數我去存儲過程。如果只有一個,我會去做功能。

除此之外,如果我使用更多的存儲過程,是否有任何性能問題?我很擔心,因爲我的項目中有近50個存儲過程。

它們在概念上有何不同。

提前致謝!

EDITED: -

當我在執行存儲過程和函數的計算,我已發現,在存儲過程中它正在0.15秒,而在功能上需要0.45sec。

令人驚訝的功能比存儲過程花費更多的時間。可能是函數值得其重用。

內聯函數執行速度快於存檔過程。我認爲,這是因爲多選函數不能使用統計,這會降低它們的速度,但內聯表值函數可以使用統計。

+1

當您運行性能測量時,您學到了什麼?請用實際結果更新問題,比較功能和過程。 – 2010-06-25 11:15:51

+0

因爲我有很多存儲過程,我想檢查,如果有任何性能問題有這麼多?問題被編輯。 – satya 2010-06-25 13:37:00

+0

當您創建一個EXAMPLE函數和一個EXAMPLE存儲過程,並且運行這兩個示例1000次以查看性能差異時,您學到了什麼?在這兩種形式中重寫所有50個*不是有用的。運行兩個EXAMPLES非常非常有用。 – 2010-06-25 20:41:45

回答

2

存儲過程和SQL Server功能之間的區別...

http://www.dotnetspider.com/resources/18920-Difference-between-Stored-Procedure-Functions.aspx

存儲過程和用戶​​定義的函數[UDF]

http://www.go4expert.com/forums/showthread.php?t=329

存儲過程與功能之間的差異

http://searchsqlserver.techtarget.com/tip/Stored-procedures-vs-functions

什麼是存儲過程和函數之間的...

http://www.allinterview.com/showanswers/28431.html

差異存儲過程之間和職能

http://www.sqlservercentral.com/Forums/Topic416974-8-1.aspx

1

的差異要使用兩個中的一個之間做出選擇,請記住它們之間的根本區別:存儲過程旨在將其輸出返回給應用程序。 UDF返回表變量,而SPROC無法返回表變量,儘管它可以創建表。它們之間的另一個顯着區別是,UDF不能更改服務器環境或操作系統環境,而SPROC可以。在操作上,當T-SQL遇到錯誤時,函數將停止,而T-SQL將忽略SPROC中的錯誤並繼續執行代碼中的下一個語句(前提是您已包含錯誤處理支持)。您還會發現,雖然可以在XML FOR子句中使用SPROC,但UDF不能。

如果您有一個操作,例如帶有FROM子句的查詢,需要從一個表或一組表中獲取行集,那麼函數將是您的合適選擇。但是,如果您想在應用程序中使用相同的行集,則更好的選擇是存儲過程。

關於UDF與SPROCs的性能優勢存在很多爭議。您可能會想,相信存儲過程會爲您的服務器增加比UDF更多的開銷。根據您的代碼編寫方式和您正在處理的數據類型,情況可能並非如此。通過嘗試使用這兩種類型的方法,將數據編入重要或耗時的操作始終是一個好主意。