MSSQL标量函数、多语句表值函数和内嵌表值函数

在SQL Server 2000中,用户可以自己定义函数来补充和扩展系统支持的内置函数,用户定义函数分为标量值函数和表值函数。如果 RETURNS 子句指定一种标量数据类型,则函数为标量值函数;如果 RETURNS 子句指定 TABLE,则函数为表值函数。根据函数主体的定义方式,表值函数又可分为内嵌表值函数和多语句表值函数,如果 RETURNS 子句指定的 TABLE 类型带有列及其数据类型,则该函数是多语句表值函数;如果 RETURNS 子句指定的 TABLE 不附带列的列表,则该函数为内嵌表值函数,内嵌表值函数是使用单个 Select 语句定义的表值函数,该语句组成了函数的主体。

1.标量函数

Create FUNCTION owner_name.function_name
    ( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] } [ ,...n ] ] )

RETURNS scalar_return_data_type

[ WITH < function_option> [ [,] ...n] ]

[ AS ]

BEGIN
    function_body
    RETURN scalar_e­xpression
END

示例:

--print dbo.fn_Test(11,14)
create function dbo.fn_Test(@a int,@b int) returns int as
begin
    return @a+@b
end

2.多语句表值函数

Create FUNCTION owner_name.function_name
    ( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] } [ ,...n ] ] )

RETURNS @return_variable TABLE < table_type_definition >

[ WITH < function_option > [ [,] ...n ] ]

[ AS ]

BEGIN
    function_body
    RETURN
END

示例:

--select * from dbo.fn_Test(10099)
create function dbo.fn_Test(@id int) returns @users table(id int identity(1,1) primary key,uid int,web varchar(20),url nvarchar(200)) as
begin
    insert into @users(uid,web,url) select id,website_name,website from union_user where id<@id
    return
end

3.内嵌表值函数

Create FUNCTION owner_name.function_name
    ( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] } [ ,...n ] ] )

RETURNS TABLE

[ WITH < function_option > [ [,] ...n ] ]

[ AS ]

RETURN [ ( ] select-stmt [ ) ]

示例:

--select * from dbo.fn_Test()
create function dbo.fn_Test() returns table as
return select top 20 * from union_user


评论: 0 | 引用: 0 | 查看次数: 7029
发表评论
登录后再发表评论!