美文网首页sql server
sql server 自定义函数

sql server 自定义函数

作者: z_strive | 来源:发表于2020-04-01 09:52 被阅读0次

    自定义函数(User-Defined Function)有两种,一种是标量UDF(Scalar-valued Functions)和表值UDF(Table-valued

    Functions),前者只返回单个数据值,而后者则返回一个表

    CREATE FUNCTIONfunction_name(@parameter_name parameter_data_type)

    RETURNS date_type   --返回返回值的数据类型

    [WITH ENCRYPTION]  --如果指定了encryption 则函数被加密

    [AS]

    BEGIN

     function_body --函数体(即 Transact-SQL 语句)

     RETURN  表达式;

    END

    在编写自定义函数时需要注意的:

    标量函数:

    1.      所有的入参前都必须加@

    2.      create后的返回,单词是returns,而不是return

    3.      returns后面的跟的不是变量,而是返回值的类型,如:int,char等。

    4.      在begin/end语句块中,是return。

    内联表格值函数:

    1.      只能返回table,所以returns后面一定是TABLE

    2.      AS后没有begin/end,只有一个return语句来返回特定的记录。

    多语句表值函数:

    1.      returns后面直接定义返回的表类型,首先是定义表名,表明前面要加@,然后是关键字TABLE,最后是表的结构。

    2.      在begin/end语句块中,直接将需要返回的结果insert到returns定义的表中就可以了,在最后return时,会将结果返回。

    3.      最后只需要return,return后面不跟任何变量。

    例子:

    ALTER function [dbo].[splitDt]

    (

    @SourceSqlvarchar(max),--传入参数

    @StrSepratevarchar(6),

    @BHvarchar(20)

    )

    returns @temp table(MCH varchar(100),BH varchar(20))---@ 表示局部变量。Returns返回值

    as

    begin

        declare@i int

        set@SourceSql = rtrim(ltrim(@SourceSql))--去除左右空格

        set@i = charindex(@StrSeprate,@SourceSql)--查找,数

        while@i >= 1---有逗号

        begin

            if len(left(@SourceSql,@i-1))>0--返回字符表达式中的字符数,值大于1个

            begin

                insert @temp values(left(@SourceSql,@i-1),@BH)

            end

            set @SourceSql=substring(@SourceSql,@i+len(@StrSeprate),len(@SourceSql)-@i)

            set @i=charindex(@StrSeprate,@SourceSql)

        end

        if@SourceSql <> ''---值是一个,没有逗号

            insert @temp values(@SourceSql,@BH)

        return

    end

    使用:

    select mch,bh FROM splitDt(RTRIM('医疗器械第一类,中成药,化妆品,消毒品,其他,化学药制剂'),',','550640')

    结果:

    1

    相关文章

      网友评论

        本文标题:sql server 自定义函数

        本文链接:https://www.haomeiwen.com/subject/eumtphtx.html