您的位置:首页 > 数据库

sql代码重构—— 创建自定义函数(三)——自定义函数和存储过程的对比

2016-07-17 17:07 260 查看

存储过程:

   可以使得对数据库的管理、以及显示关于数据库及其用户信息的工作容易得多。存储过程是 SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行以及其它强大的编程功能。

存储过程可包含程序流、逻辑以及对数据库的查询。它们可以接受参数、输出参数、返回单个或多个结果集以及返回值。

可以出于任何使用 SQL 语句的目的来使用存储过程

  其优点:

1、可以在单个存储过程中执行一系列 SQL 语句。

2、可以从自己的存储过程内引用其它存储过程,这可以简化一系列复杂语句。

3、存储过程在创建时即在服务器上进行编译,所以执行起来比单个 SQL 语句快

自定义函数:

  是封装有用的逻辑关系以便在其他查询中使用的例程。视图限于单个 SELECT 语句,而用户定义的函数可以有多个 SELECT 语句,它提供的逻辑关系比视图可能提供的逻辑关系更强大。

  用户定义的函数始终返回一个值。取决于所返回值的类型,每个用户定义的函数均属于以下三个类别之一:

标量值函数   可以返回整数或时间戳等标量值的用户定义的函数。如果函数返回标量值,则可以在查询中能够使用列名的任何地方使用该函数。
内联函数   如果用户定义的某个函数包含一个 SELECT 语句,并且该语句是可更新的,则该函数所返回的表格格式结果也是可更新的。此类函数称为内联函数。当内联函数返回表时,您可以在另一个查询的 FROM 子句中使用该函数。
表值函数   如果用户定义的某个函数包含一个以上的 SELECT 语句,或包含一个不可更新的 SELECT 语句,则该函数所返回的表格格式结果不可更新。当表值函数返回表时,您可以在另一个查询的 FROM 子句中使用该函数。

区别:

   1.一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。

   2.对于存储过程来说可以返回参数,而函数只能返回值或者表对象。

   3.存储过程一般是作为一个独立的部分来执行,而函数可以作为查询语句的一个部分来调用,由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。

   4.当存储过程和函数被执行的时候,SQL Manager会到procedure cache中去取相应的查询语句,如果在procedure cache里没有相应的查询语句,SQL Manager就会对存储过程和函数进行编译。

 

注:sql语句执行的时候要先编译,然后执行。存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程

小结:
   此番在实战的过程中,用到了自定义的函数,刚开始自己看到这样子的一段sql代码感觉好怕怕。140多行的代码,写了那么多逻辑在里面……从开始的仰望,到最后的重构。这过程中,刚开始查了很多资料,发现好像可以用函数,有好像应该用存储过程,看网上博客说函数有很多限制……最终搞得自己好无语啥也没干成,其实最后发现,自己应该将各种解决方案列出来,然后去实践尝试自己的想法和这些解决方案,这样才能最快最准确的得到结果。而不是一味的查资料。最后,还是要落实到实践检验!代码走起!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: