SQL Server自定义函数

来源:互联网 发布:java时间戳转换成毫秒 编辑:程序博客网 时间:2024/05/01 19:01

  SQL Server 允许用户自定义函数,插入到查询或者存储过程中来完成相应的计算。根据函数返回值的不同,

可以将函数分为3类:标量函数、内联表值函数、多语句 表值函数。

1、标量函数

语法:

CREATE FUNCTION [ schema_name. ] function_name ( [ { @parameter_name [ AS ][ type_schema_name. ] parameter_data_type     [ = default ] }     [ ,...n ]  ])RETURNS return_data_type    [ WITH <function_option> [ ,...n ] ]    [ AS ]    BEGIN                 function_body         RETURN scalar_expression    END[ ; ]

标量函数返回一个确定类型的标量值,其返回值类型为除 TEXT 、 NTEXT 、IMAGE 、 CURSOR 、 TIMESTAMP

和 TABLE 类型外的其它数据类型。

create function test_1(@name nvarchar(20),@age int)returns bitasbegindeclare @result bitset @result = 0if @age > 12beginif @name is not nullset @result = 1endreturn @resultenddeclare @r bitexec @r = dbo.test_1 null,14print @r 

2、内联表值函数

语法:

CREATE FUNCTION [ schema_name. ] function_name ( [ { @parameter_name [ AS ] [ type_schema_name. ] parameter_data_type     [ = default ] }     [ ,...n ]  ])RETURNS TABLE    [ WITH <function_option> [ ,...n ] ]    [ AS ]    RETURN [ ( ] select_stmt [ ) ][ ; ]

以表的形式返回一个返回值,即它返回的是一个表。内联 表值型函数没有由 BEGIN-END 语句括起来的函数体。

其返回的表是由一个位于RETURN 子句中的 SELECT 命令从数据库中筛选出来。

-- 内联表值函数:返回结果集create function test_2(@id int)returns tableasreturn select id,applicanttime from attendance_tx where id = @idselect * from test_2(4)

3、多语句 表值函数

语法:

CREATE FUNCTION [ schema_name. ] function_name ( [ { @parameter_name [ AS ] [ type_schema_name. ] parameter_data_type     [ = default ] }     [ ,...n ]  ])RETURNS @return_variable TABLE < table_type_definition >    [ WITH <function_option> [ ,...n ] ]    [ AS ]    BEGIN                 function_body         RETURN    END[ ; ]

它的返回值 也是一个表,但它和标量型函数一样有一个用 BEGIN-END 语句括起来的函数体,返
回值的表中的数据是由函数体中的语句插入的。也就是说,它可以进行多次筛选 ,
对数据进行多次合并,弥补了内联表值函数的不足。

-- 多语句表值函数create function test_3()returns @tab table (id int primary key not null,cname nvarchar(20),age int)asbegininsert @tab select userid ,loginname,grpid from z_aut_usermsgreturnendselect * from test_3()

4、删除函数

-- 删除自定义函数drop function 函数名



原创粉丝点击