一.用户定义函数可以接受参数,执行操作并将操作结果以值的形式返回。用户定义函数也可以使用在表达式,查询,存储过程中。
二.用户定义函数与存储过程的比较
用户定义函数与存储过程类似,都是由多行T-SQL语句所组成的,都可以接受参数,都可以返回值,但用户定义函数也有和存储过程所不能比拟的优点:
1.用户定义函数可以返回,除了text,ntext,image,cursor 和timestamp类型之外的所有数据类型,而存储过程只能返回整数值。
2.用户定义函数执行方式灵活,可以通过execute方式执行,也可以用在表达式中,并以返回值的方式来取代函数名,儿存储过程只能通过execute来执行。
三.与存储过程相比,用户定义函数也有不足之处:
1.存储过程可以通过output参数来返回数据,而用户定义函数只可以接受参数,不能通过output类型的参数返回值。
2.在存储过程中可以对任何数据及对象进行修改,包括新建及删除数据表,修改数据库设置等,而在用户定义函数里只能对数据进行修改,不能对数据库对象进行修改。
简单的说,存储过程适合进行不用返回结果的操作,用户定义函数适合进行计算,提取数据等需要返回结果的操作。
四.用户定义函数类型
根据用户定义函数的返回值,可以将用户定义函数分为标量值函数和表值函数两个类型。
1.标量值函数:标量值函数可以返回一个在return子句里定义的确定类型的标量值。返回值可以是除了text,ntext,image,cursor,timestamp和table类型之外的所有数据类型,在多语句标量函数里,函数体语句定义在begin和end语句之内,其中包含了可以返回值的T-SQL语句。
2.表值函数:表值函数返回的是table数据类型,表值函数又可以范围内联表值函数和多语句表值函数两种。
内联表值函数的返回值是一个表。在内联表值函数里没有begin和end语句括起来的函数体,返回的表是一个位于return子句中的select语句从数据库里提取的数据。内联表值函数
看起来有点像一个具有参数的视图。
多语句表值函数的返回值也是一个表。与标量值函数一样,在多语句函数里也有一个用begin和end语句括起来的函数体,在函数体里可以包含多个T-SQL语句,通过这些T-SQL语句返回表中的数据。由于多语句表值函数里可以包含多个T-SQL语句,所以在多语句表值函数里可以对数据进行多次查询,合并等操作,是内联表值函数的补充。