在很多实例中,我们既可以使用存储过程也可以使用函数来完成相同的任务。函数和存储过程两者都可以定义和成为任意应用的一部分。另外,函数还可以将输出发送到查询或者T-SQL语句上。比如,用户自定义函数(User Defined Functions,UDF)可以在SQL SELECT或者一个动作查询上运行一个可执行的文件,而存储过程(Stored Procedures,SPROC)则可以使用EXECUTE或者EXEC来运行。
两者都是使用CREATE FUNCTION来实例化的。 在决定两者之间使用哪一个时,要记住两者之间的根本不同:存储过程是用来将输出返回给应用的。UDF可以返回表的变量,而SPR……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
在很多实例中,我们既可以使用存储过程也可以使用函数来完成相同的任务。函数和存储过程两者都可以定义和成为任意应用的一部分。另外,函数还可以将输出发送到查询或者T-SQL语句上。比如,用户自定义函数(User Defined Functions,UDF)可以在SQL SELECT或者一个动作查询上运行一个可执行的文件,而存储过程(Stored Procedures,SPROC)则可以使用EXECUTE或者EXEC来运行。两者都是使用CREATE FUNCTION来实例化的。
在决定两者之间使用哪一个时,要记住两者之间的根本不同:存储过程是用来将输出返回给应用的。UDF可以返回表的变量,而SPROC则无法返回表变量,即使它可以创建表。另外一个显著的不同是,UDF无法修改服务器环境或者操作系统环境,而SPROC则可以。在操作上,当T-SQL遇上错误时,函数就会终止,而T-SQL则在SPROC中忽略这个错误并继续进行代码的下一个语句(假设我们已经包含了错误处理支持)。同时,我们还会发现,SPROC可以在XML FOR子句中使用,但是UDF则不可以。
假设我们有一个操作,如用FROM子句查询,那么它会要求在一个表或者表集中抽取出一个行集,这样我们就应该选择函数。然而,当我们想要在我们的应用中使用这个行集时,最佳的选择则是存储过程。
关于UDF和SPROC对于性能的影响一直存在有着很大的争论。我们可能都会认为存储过程会比UDF增加更多负荷到服务器上。根据我们编写代码的方式以及我们所处理的数据类型,情况并不完全是这样的。正确的做法是在重要的或者耗时的操作上同时测试这两种方法。
翻译
TechTarget中国特约技术编辑,某高校计算机科学专业教师和网络实验室负责人,曾任职某网络国际厂商,关注数据中心、开发运维、数据库及软件开发技术。有多本关于思科数据中心和虚拟化技术的译著,如《思科绿色数据中心建设与管理》和《基于IP的能源管理》等。
相关推荐
-
TT百科:存储过程
存储的过程可以访问或修改数据库中的数据,但并不绑定到特定的数据库或对象,这提供了许多优点。
-
Azure数据湖分析从U-SQL中获得提升
大数据的发展已经让许多精通SQL的数据专业人员不知所措。微软的U-SQL编程语言试图让这些人回归数据查询游戏。
-
TT百科:SQL(结构化查询语言)
一般来说,SQL-on-Hadoop仍是一项新兴技术,但随着各个公司寻求获得拥有大数据应用程序编程SQL技能的开发和分析人员,它们正逐渐成为Hadoop部署的固定组件。
-
SQL和NoSQL数据库设计之争
企业收集了很多大规模增长的松散结构化数据,Hadoop,Spark以及其他新技术处理这些数据非常有助于改善商业智能分析效率。