存储过程和功能

时间:2010-06-25 10:57:50

标签: sql-server stored-procedures

存储过程和函数之间有什么区别。

每当有更多输入时,输出参数就会用于存储过程。如果它只是一个,我将去寻找功能。

除此之外,如果我使用更多存储过程,是否存在任何性能问题?我很担心,因为我的项目中有近50个存储过程。

他们在概念上有何不同。

提前致谢!

EDITED: -

当我在存储过程和函数中执行计算时,我发现在存储过程中它需要0.15秒,而在函数中它需要0.45秒。

令人惊讶的是,函数比存储过程花费的时间更多。可能功能是值得的可重用性。

内联函数的执行速度比执行程序快。我认为,这是因为多选功能不能使用statastics,这会降低它们的速度,但内联表值函数可以使用统计信息。

2 个答案:

答案 0 :(得分: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 :(得分:1)

要在使用其中一个之间做出决定,请记住它们之间的根本区别:存储过程旨在将其输出返回给应用程序。 UDF返回表变量,而SPROC不能返回表变量,尽管它可以创建表。它们之间的另一个显着差异是UDF无法改变服务器环境或操作系统环境,而SPROC则可以。在操作上,当T-SQL遇到错误时函数停止,而T-SQL将忽略SPROC中的错误并继续执行代码中的下一个语句(前提是您已包含错误处理支持)。您还会发现虽然可以在XML FOR子句中使用SPROC,但UDF不能。

如果您的操作(例如带有FROM子句的查询)需要从表或表集中绘制行集,那么函数将是您的合适选择。但是,当您想在应用程序中使用相同的行集时,更好的选择是存储过程。

关于UDF与SPROC的性能优势存在相当多的争议。您可能会认为存储过程会给您的服务器增加比UDF更多的开销。根据您编写代码的方式以及您正在处理的数据类型,可能不是这种情况。通过在它们上面尝试两种类型的方法,在重要或耗时的操作中发布数据总是一个好主意。