储过程和用户自定义函数的区别

来源:互联网 发布:js获取当前设备宽度 编辑:程序博客网 时间:2024/06/05 09:44

常常有人问存储过程和用户自定义函数的区别究竟是什么,在网络上尝试搜索,却没见到十分全的总结,于是自己做个总结:

Procedure:

  1. CREATE { PROC | PROCEDURE } [schema_name.] procedure_name [ ; number ] 
  2.     [ { @parameter [ type_schema_name. ] data_type } 
  3.         [ VARYING ] [ = default ] [ OUT | OUTPUT ] [READONLY]
  4.     ] [ ,...n ] 
  5. [ WITH <procedure_option> [ ,...n ] ]
  6. [ FOR REPLICATION ] 
  7. AS { <sql_statement> [;][ ...n ] | <method_specifier> }
  8. [;]
  9. <procedure_option> ::= 
  10.     [ ENCRYPTION ]
  11.     [ RECOMPILE ]
  12.     [ EXECUTE AS Clause ]
  13. <sql_statement> ::= 
  14. { [ BEGIN ] statements [ END ] }
  15. <method_specifier> ::=
  16. EXTERNAL NAME assembly_name.class_name.method_name

Function:

  1. CREATE FUNCTION [ schema_name. ] function_name 
  2. ( [ { @parameter_name [ AS ][ type_schema_name. ] parameter_data_type 
  3.     [ = default ] [ READONLY ] } 
  4.     [ ,...n ]
  5.   ]
  6. )
  7. RETURNS return_data_type
  8.     [ WITH <function_option> [ ,...n ] ]
  9.     [ AS ]
  10.     BEGIN 
  11.                 function_body 
  12.         RETURN scalar_expression
  13.     END
  14. [ ; ]

区别:

1.嵌套
function:无限制
sp:最多32层
2.改数据操作
function:不支持
sp:支持
3.结果返回
function:可以返回标量值,返回表变量(表甚至可以定义名字) 具有不确定性,必须返回
sp:并不一定需要返回,可返回记录集。
户定义函数不能用于执行一组修改全局数据库状态的操作
4.是否可以使用非确定函数
function:不允许在用户定义函数主体中内置非确定函数。
sp:可以使用非确定函数。
5.返回值引用
function:其返回值可以被直接引用
sp:其返回值不能被直接引用
6.调用
function:在其他语句中调用select
sp:EXEC
7.是否可以使用out参数
function:function没有out参数,但是可以有返回值.
sp:可以out参数


 

原创粉丝点击