SQL SERVER 中过程和函数的区别

来源:互联网 发布:阿里云邮箱容量超限 编辑:程序博客网 时间:2024/05/16 14:08

 

存储过程

函数

存储过程定义中的参数可以为任意数据类型,包括用户定义的类型,同时过程还可以拥有输出参数,用于返回任何数据类型的结果。
存储过程只能直接返回整型值,通常用于显示过程执行的状态。
在存储过程定义中可以包含任何 T-SQL 语句可以向用户返回查询的结果集允许递归(最大 32 层),可以创建/引用临时表
存储过程的参数有默认值时,只要在调用存储过程时不指定该参数的值或将 DEFAULT 关键字指定为该参数的值,即可使用默认值。
存储过程不能用于表达式、计算列、DEFAULT 约束和 CHECK 约束中。
系统内置的存储过程有以下特点:其名称以 sp_ 开头存储在 MASTER 数据库中。并且符合以上条件的用户定义存储过程可以在任何数据库下,不需要提供四部分名,即可被调用。 函数定义中的参数不能是  timestampcursortable 用户定义的数据类型,且没有输出参数
函数可以直接返回除 LOBcursortable timestamp  外任何数据类型的值
在函数定义中不能有修改函数外对象的 T-SQL 语句不能向用户返回任何结果集不允许递归不能创建/引用临时表
函数的参数有默认值时,在调用函数时必须将 DEFAULT 关键字指定为该参数的值,才可以使用默认值。
函数可以用于表达式、计算列、DEFAULT 约束和 CHECK 约束中。
系统内置的函数有以下特点:其名称以 fn_ 开头,名称都是小写字母,存储在 MASTER 数据库中,其所有者为 system_function_schema。在调用系统内置的表值函数时,需要加 :: 前缀。需要启用 allow updates 服务器选项,才能将用户定义函数的所有者定义为  system_function_schema