【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
我学习函数和存储过程已经有一段时间了,但是我不知道为什么以及何时应该使用函数或存储过程。 在我看来,它们看起来一样,也许是因为我对此有些新手。
有人可以告诉我为什么吗?
#1楼
函数可以用在select语句中,而过程则不能。
存储过程同时接受输入和输出参数,而功能仅接受输入参数。
函数无法在过程可以的地方返回text,ntext,image和timestamps类型的值。
函数可以在创建表中用作用户定义的数据类型,但过程不能。
***例如:-创建table <tablename>(name varchar(10),salary getsal(name))
这里的getsal是一个用户定义的函数,它返回一个薪金类型,在创建表时没有为薪金类型分配存储空间,也没有执行getsal函数,但是当我们从该表中获取某些值时,将执行getsal函数get和return类型作为结果集返回。
#2楼
函数是计算值,不能对SQL Server进行永久的环境更改(即,不允许INSERT或UPDATE语句)。
如果函数返回标量值,则可以在SQL语句中内联使用;如果返回结果集,则可以将其加入。
注释总结了答案,这一点值得一提。 感谢@Sean K Anderson:
函数遵循计算机科学的定义,因为它们必须返回一个值,并且不能更改作为参数(自变量)接收的数据。 函数不允许更改任何内容,必须至少具有一个参数,并且它们必须返回一个值。 存储的proc不必具有参数,可以更改数据库对象,也不必返回值。
#3楼
当您要计算并返回供其他SQL语句使用的值时,编写一个用户定义的函数; 当您想要对一组可能很复杂的SQL语句进行分组时,编写一个存储过程。 毕竟,这是两个截然不同的用例!
#4楼
要决定何时使用以下几点可能会有所帮助-
存储过程无法返回表变量,而函数可以做到这一点。
您可以使用存储过程来更改服务器环境参数,而不能使用函数。
干杯
#5楼
用户定义函数是SQL Server程序员可用的重要工具。 您可以像这样在SQL语句中内联使用它
SELECT a, lookupValue(b), c FROM customers
其中lookupValue
将是UDF。 使用存储过程时,这种功能是不可能的。 同时,您不能在UDF中执行某些操作。 这里要记住的基本内容是UDF:
- 无法创建永久更改
- 无法更改数据
存储过程可以完成那些事情。
对我来说,UDF的内联用法是UDF的最重要用法。
来源:oschina
链接:https://my.oschina.net/u/3797416/blog/3145045