SqlServer自定义函数学习
2011-12-07 23:50
176 查看
自定义函数分为:标量值函数或表值函数
如果 RETURNS 子句指定一种标量数据类型,则函数为标量值函数。可以使用多条 Transact-SQL 语句定义标量值函数。
如果 RETURNS 子句指定 TABLE,则函数为表值函数。
表值函数又可分为:内嵌表值函数(行内函数)或多语句函数
如果 RETURNS 子句指定的 TABLE 不附带列的列表,则该函数为内嵌表值函数。
如果 RETURNS 子句指定的 TABLE 类型带有列及其数据类型,则该函数是多语句表值函数。
标量值函数示例
内嵌表值函数示例
内嵌表值函数只有一个 select 语句。
多语句表值函数示例(部分)
注意其 RETURNS 部分。
多语句函数的主体中允许使用以下语句。未在下面的列表中列出的语句不能用在函数主体中。
赋值语句。
控制流语句。
DECLARE 语句,该语句定义函数局部的数据变量和游标。
SELECT 语句,该语句包含带有表达式的选择列表,其中的表达式将值赋予函数的局部变量。
游标操作,该操作引用在函数中声明、打开、关闭和释放的局部游标。只允许使用以 INTO 子句向局部变量赋值的 FETCH 语句;不允许使用将数据返回到客户端的 FETCH 语句。
INSERT、UPDATE 和 DELETE 语句,这些语句修改函数的局部 table 变量。
EXECUTE 语句调用扩展存储过程。
函数最多可以有 1024 个输入参数。当函数的参数有默认值时,调用该函数时必须指定默认 DEFAULT 关键字才能获取默认值。
调用用户定义函数
当调用标量用户定义函数时,必须提供至少由两部分组成的名称:
可以使用一个部分构成的名称调用表值函数:
然而,当调用返回表的 SQL Server 内置函数时,必须将前缀 :: 添加至函数名:
如果 RETURNS 子句指定一种标量数据类型,则函数为标量值函数。可以使用多条 Transact-SQL 语句定义标量值函数。
如果 RETURNS 子句指定 TABLE,则函数为表值函数。
表值函数又可分为:内嵌表值函数(行内函数)或多语句函数
如果 RETURNS 子句指定的 TABLE 不附带列的列表,则该函数为内嵌表值函数。
如果 RETURNS 子句指定的 TABLE 类型带有列及其数据类型,则该函数是多语句表值函数。
标量值函数示例
CREATE FUNCTION dbo.Foo() RETURNS int AS BEGIN declare @n int select @n=3 return @n END
内嵌表值函数示例
CREATE FUNCTION dbo.Foo()--函数名 RETURNS TABLE --返回值类型 AS --以下为函数体 return select id, title from msgs
内嵌表值函数只有一个 select 语句。
多语句表值函数示例(部分)
CREATE FUNCTION fn_FindReports (@InEmpId nchar(5)) RETURNS @retFindReports TABLE (empid nchar(5) primary key, empname nvarchar(50) NOT NULL, mgrid nchar(5), title nvarchar(30)) .........
注意其 RETURNS 部分。
多语句函数的主体中允许使用以下语句。未在下面的列表中列出的语句不能用在函数主体中。
赋值语句。
控制流语句。
DECLARE 语句,该语句定义函数局部的数据变量和游标。
SELECT 语句,该语句包含带有表达式的选择列表,其中的表达式将值赋予函数的局部变量。
游标操作,该操作引用在函数中声明、打开、关闭和释放的局部游标。只允许使用以 INTO 子句向局部变量赋值的 FETCH 语句;不允许使用将数据返回到客户端的 FETCH 语句。
INSERT、UPDATE 和 DELETE 语句,这些语句修改函数的局部 table 变量。
EXECUTE 语句调用扩展存储过程。
函数最多可以有 1024 个输入参数。当函数的参数有默认值时,调用该函数时必须指定默认 DEFAULT 关键字才能获取默认值。
CREATE FUNCTION CubicVolume -- Input dimensions in centimeters (@CubeLength int --参数类型 @CubeWidth int, @CubeHeight int ) RETURNS int -- Cubic Centimeters. AS BEGIN RETURN ( @CubeLength * @CubeWidth * @CubeHeight ) END
调用用户定义函数
当调用标量用户定义函数时,必须提供至少由两部分组成的名称:
1 2 | SELECT *, MyUser.MyScalarFunction(1,2') FROM MyTable |
1 2 | SELECT * FROM MyTableFunction(1,2,3) ) |
1 | SELECT * FROM ::fn_helpcollations(1,'a') |
相关文章推荐
- .net学习总结(6)之sqlserver 自定义函数与存储过程
- SqlServer自定义函数学习
- SQLServer自定义函数学习
- sqlserver -- 学习笔记(一)自定义函数(学习总结,备忘)
- 学习ThinkPHP3.2.2:了解并测试与3.1不同之处_自定义函数文件名称
- 在SqlServer中用自定义函数返回动态表内容
- 数据库自定义函数学习
- 学习笔记——自定义字符串操作函数
- 数据库菜鸟学习之旅(二):Mysql自定义函数
- 我的MYSQL学习心得(十) 自定义存储过程和函数
- sqlserver 自定义字符串分割函数.
- 【转】MYSQL入门学习之十三:自定义函数的基本操作
- kotlin学习之自定义lambda表达式----简单易懂教你写一个可以接受lambda表达式的函数
- MYSQL学习心得(9) -- 自定义存储过程和函数
- python自定义输入名字并打印-学习笔记10-输入函数
- MySQL学习笔记(十四)自定义函数
- sqlserver存储过程如何调用自定义函数
- shell学习总结之自定义函数
- MYSQL学习心得(十) 自定义存储过程和函数
- 关于MySql中使用自定义函数的学习心得