SQL Server中的功能与存储过程

若如初见. 提交于 2019-12-19 17:58:03

【推荐】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楼

要决定何时使用以下几点可能会有所帮助-

  1. 存储过程无法返回表变量,而函数可以做到这一点。

  2. 您可以使用存储过程来更改服务器环境参数,而不能使用函数。

干杯


#5楼

用户定义函数是SQL Server程序员可用的重要工具。 您可以像这样在SQL语句中内联使用它

SELECT a, lookupValue(b), c FROM customers 

其中lookupValue将是UDF。 使用存储过程时,这种功能是不可能的。 同时,您不能在UDF中执行某些操作。 这里要记住的基本内容是UDF:

  • 无法创建永久更改
  • 无法更改数据

存储过程可以完成那些事情。

对我来说,UDF的内联用法是UDF的最重要用法。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!