存储过程和函数的区别

如题所述

Sql Server 数据库中的存储过程:

解析SQL存储过程:

存储过程(Stored Procedure),是一组为了完成特定功能的SQL 语句,类似一门程序设计语言,也包括了数据类型、流程控制、输入和输出和它自己的函数库。存储过程可以说是一个记录集,它是由一些T-SQL语句组成的代码块,这些T-SQL语句代码像一个方法一样实现一些功能(对单表或多表的增删改查),然后再给这个代码块取一个名字,在用到这个 功能的时候调用他就行了。不过SQL存储过程对于一些初学者来说还是比较抽象难理解的,因此本文将由浅至深地剖析SQL存储过程,帮助你学习它。

存储过程的优点:

    存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度,效率要比T-SQL语句高。

    当对数据库进行复杂操作时,可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。

    一个存储过程在程序在网络中交互时可以替代大堆的T-SQL语句,所以也能降低网络的通信量,提高通信速率。

    存储过程可以重复使用,可减少数据库开发人员的工作量。

    安全性高,可设定只有某些用户才具有对指定存储过程的使用权

    存储过程的缺点:

    存储过程将给server带来额外的压力。

    存储过程多多时维护比较困难。

    移植性差。在升级到不同的数据库时比较困难。

    调试麻烦。SQL语言的处理功能简单。

    Sql Server 数据库中的自定义函数:

    “自定义函数”是我们平常的说法,而“用户定义的函数”是 SQL Server 中书面的说法。

    自定义函数分为:标量值函数或表值函数

    如果 RETURNS 子句指定一种标量数据类型,则函数为标量值函数。可以使用多条 Transact-SQL 语句定义标量值函数。
    如果 RETURNS 子句指定 TABLE,则函数为表值函数。
    表值函数又可分为:内嵌表值函数(行内函数)或多语句函数
    如果 RETURNS 子句指定的 TABLE 不附带列的列表,则该函数为内嵌表值函数。
    如果 RETURNS 子句指定的 TABLE 类型带有列及其数据类型,则该函数是多语句表值函数。

    自定义函数优点:

    可以在SQL语句中调用,直接使用返回值,从而可以形成复杂的SQL应用。

    自定义函数缺点:

    能在函数中使用的语句有严格限制:

    不支持create、ALTER、drop等DDL(Data Definition Language)命令;

    insert、delete、update只能用在临时表上;

    不支持动态SQL;

    不支持“不确定”的函数,比如常用的getdate。不确定函数是指输入参数相同,返回结果可能不同的函数。

    变通办法:
    要解决用户函数的种种限制,可以巧妙运用用户函数调用存储过程。比如,需要在函数中用getdate,就写个存储过程返回getdate的结果。然后从函数里去调用这个存储过程。需要在函数中使用update等,也可类推。

    白雨青工作站发文地址:www.byqws.com/blog/1046.html

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-02-13
不同点:
1、标识符不同。函数的标识符为FUNCTION,过程为:PROCEDURE。
2、函数中有返回值,且必须返回,而过程没有返回值。
3、过程无返回值类型,不能将结果直接赋值给变量;函数有返回值类型,调用时,除在select中,必须将返回值赋给变量。
4、函数可以在select语句中直接使用,而过程不能,例如:假设已有函数fun_getAVG()
返回number类型绝对值。那么select
fun_getAVG(col_a)
from
table
这样是可以的。
相同点:
二者都可以有出参
第2个回答  2020-04-09
1、常规下函数带有返回值,而存储过程无返回值。
2、函数往往作为公式使用,存储过程作为完成某种功能使用。
3、函数也可以带返回参数,过程也可以带返回参数。
第3个回答  2020-05-19
存储过程需要单独执行;
函数可以随处调用。
存储过程是保存起来的可以接受和返回用户提供的参数的
Transact-SQL
语句的集合。
可以创建一个过程供永久使用,或在一个会话中临时使用(局部临时过程),或在所有会话中临时使用(全局临时过程)。
也可以创建在
Microsoft®
SQL
Server™
启动时自动运行的存储过程。
用户定义函数,它是返回值的已保存的
Transact-SQL
例程。用户定义函数不能用于执行一组修改全局数据库状态的操作。
与系统函数一样,用户定义函数可以从查询中唤醒调用。也可以像存储过程一样,通过
EXECUTE
语句执行。
http://topic.csdn.net/t/20030806/16/2116067.html
http://www.cnsdn.com.cn/blog/article.asp?id=2035这个的解释也很好。本回答被提问者采纳
第4个回答  2019-05-12
函数分为表值函数跟标量函数
表值函数是经过一些sql语句方法最后返回一张表
标量函数是经过一些sql语句方法最后返回一个值
存储过程是经过一些sql语句方法既可以返回表也可以返回值,且限制相对较少,
而函数方法有很多限制
相似回答