• SQL Server编程(02)自定义函数


    在编程过程中,我们通常把特定的功能语句块封装称函数,方便代码的重用。我们可以在SQL Server中自定义函数,根据函数返回值的区别,我们自定义的函数分两种:标量值函数和表值函数。

    自定义函数的优点:

    • 模块化程序设计
    • 更快的执行速度
    • 减少网络传输

    一个函数最多可以有1024个参数;在调用函数时,如果未定义参数的默认值,则必须提供已声明参数的值。

    创建标量值函数

    下面的这个函数根据生日返回年龄:

    create function dbo.calcAge(@birthday datetime)    --函数名和参数
    returns int    --返回值类型
    as
    begin
        declare @now datetime
        declare @age int
        set @now=getdate()
    
        set @age=YEAR(@now)-YEAR(@birthday)
    
        return @age    --返回值
    end
    

    执行这段脚本创建函数,创建成功之后,我们调用一下看看效果:

    print dbo.calcAge('2000-1-1')
    

    输出:15

    注意:在调用自定义函数的时候,我们必须给出schema_name(架构名,此处是dbo),否则会提示“'calcAge' 不是可以识别的 内置函数名称。”

    创建表值函数

    顾名思义,表值函数的返回值不再是一个标量值,而是一个数据表;表值函数返回的表与其它数据表一样,可以进行join、where等操作。

    create function getUser(@name nvarchar(50))
    returns table
    as
    return (
        select 
            Id,UserName,[Status] 
        from 
            tb_user
        where UserName like '%' + @name + '%'
    )
    

    上面的代码完成了一个表值函数的创建。

    在创建的过程中遇到一点疑问表值函数不能包含begin…end这样的语句块,只能用return返回table此处存疑

    可以将表值函数放在select语句中使用:

    select * from dbo.getUser('admin')
    

    得到的结果集:

    image

    修改自定义函数

    使用alter语句修改自定义函数,下面的代码演示如何修改getUser函数:

    alter function getUser    --指明要修改的函数名
    (@status int)    --修改参数类型
    returns table
    as
    return (
        select 
            Id,UserName,[Status] 
        from 
            tb_user
        where [Status]=@status
    )
    

    删除自定义函数

    使用drop语句删除:

    drop function calcAge
    

    作者:齐飞(youring2@gmail.com

    原文链接:http://www.qeefee.com/article/000565

  • 相关阅读:
    DataGridView拖动到TreeView
    TreeView 拖拽 增删改
    C# 代码生成器 (存储过程生成方法)
    VC++ VS2010 error LNK1123 转换到 COFF 期间失败 怎么办
    VB和VB.NET有什么区别
    VB6 如何添加自定义函数 模块 把代码放到一个模块中
    VB6 如何连接MYSQL数据库
    VB6 如何自定义代码字体和支持鼠标滚轮
    Visual Studio VS如何切换代码自动换行
    UltraEdit UE常见问题 使用必读
  • 原文地址:https://www.cnblogs.com/zxbzl/p/5787606.html
Copyright © 2020-2023  润新知