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