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