SQL函数

/*
1标量值函数,简单点来讲就是返回的结果只是一个标量,对于我来讲,返回的结果就是一种类型的一个值。
2内联表值函数 ,内联表值函数返回的是表数据。当然罗,表数据就是Table类型。内联表函数返回的表结构由函数体内的SELECT语句来决定。
3多语句表值函数,多语句表值函数跟内联表值函数都是表值函数,它们返回的结果都是Table类型。多语句表值函数顾名思义,就是可以通过多条语句来创建Table类型的数据。这里不同于内联表值函数,内联表值函数的返回结果是由函数体内的SELECT语句来决定。而多语句表值函数,则是需要指定具体的Table类型的结构。也就是说返回的Table,已经定义好要哪些字段返回。所以它能够支持多条语句的执行来创建Table数据。

自定义函数注意:
1 可以返回表变量
2不能使用output参数;不能用临时表;函数内部的操作不能影响到外部环境;不能通过select返回结果集;不能update,delete,数据库表;
3必须return 一个标量值或表变量
*/

create function [ schema_name. ] function_name 
( [ { @parameter_name [ as ][ type_schema_name. ] parameter_data_type 
    [ = default ] [ readonly ] } 
    [ ,...n ]
  ]
)
returns return_data_type
    [ with <function_option> [ ,...n ] ]
    [ as ]
    begin 
                function_body 
        return scalar_expression
    end
[ ; ]



--新建标量值函数 
create function biaoliangfun( @va1 int=1,@va2 int)
returns int
as
begin
    declare @result int=1
    return @result
end

  
--新建内联表值函数 
create function biaozhifun( @va1 int)
returns table 
as
return 
(
    select id,name from people where age = @va1
)


--新建多语句表值函数 
create function duobiaofun( @va1 int)
returns @result table (id int,name nvarchar(20))
as
begin
    insert into @result(id,name) values(100,'china')
    return 
end


--删除标量值函数 
drop function biaoliangfun
  
--调用表值函数 
select * from biaozhifun(10) 

--调用标量值函数 
declare @zhi int
set @zhi=biaoliangfun(10) 
  

 

posted @ 2019-04-11 23:24  唧唧复唧唧木兰当户织  阅读(386)  评论(0编辑  收藏  举报