• [Irving]SqlServer 标量函数 详解【转】


    --创建用户定义函数。这是一个已保存 Transact-SQL 或公共语言运行时 (CLR) 例程,
    --该例程可返回一个值。用户定义函数不能用于执行修改数据库状态的操作。
    --与系统函数一样,用户定义函数可从查询中调用。标量函数和存储过程一样,可使用 EXECUTE 语句执行。

    标量函数的语法格式

    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
    [ ; ]

    创建一个简单的标量函数

     用户定义函数不能用于执行修改数据库状态的操作 即不能对表进行修改.添加.删除

    下列语句在函数内有效:

    • 赋值语句。
    • TRY...CATCH 语句以外的流控制语句。
    • 定义局部数据变量和局部游标的 DECLARE 语句。
    • SELECT 语句,其中的选择列表包含为局部变量分配值的表达式。
    • 游标操作,该操作引用在函数中声明、打开、关闭和释放的局部游标。只允许使用以 INTO 子句向局部变量赋值的 FETCH 语句;不允许使用将数据返回到客户端的 FETCH 语句。
    • 修改 table 局部变量的 INSERT、UPDATE 和 DELETE 语句。
    • 调用扩展存储过程的 EXECUTE 语句。

    用户定义函数可以嵌套

    也就是说,用户定义函数可相互调用。被调用函数开始执行时,嵌套级别将增加;被调用函数执行结束后,嵌套级别将减少。用户定义函数的嵌套级别最多可达 32 级。如果超出最大嵌套级别数,整个调用函数链将失败。


    CREATE FUNCTION HelloWordFunction(@Text VARCHAR(10)) 

    --参数的类型和长度必须指定大小如果不指定会出现值的长度丢失 

    --返回值的长度也要指定
    RETURNS VARCHAR(10)
    BEGIN
     
    RETURN @Text
    END

    调用方式

    方式一 :标量函数和存储过程一样,可使用 EXECUTE 语句执行


    DECLARE @ReturnValue VARCHAR(10)
    EXECUTE @ReturnValue=dbo.HelloWordFunction 'HelloWrod'
    PRINT @ReturnValue

    结果:

     

    方式二:直接调用


    PRINT dbo.[HelloWordFunction]('Hello')

     

  • 相关阅读:
    一个误操作,导致mysql所有表打不开,我是不是应该删库跑路?非著名喷子
    SqlServer 一些跟时间相关的东西
    C# 在代码里调用其他Webapi
    Typroa + smms-uploader 实现上传图片到 SM.MS 图床
    Redis哨兵模式
    给 Git 仓库瘦身,删除大文件的版本控制
    修复 UEditor 上传视频的相关问题
    MongoDB 海量数据高效读写
    .NET 5中 Autofac 的使用
    Dapper 的 AspNetCore 扩展包
  • 原文地址:https://www.cnblogs.com/teamate/p/3723022.html
Copyright © 2020-2023  润新知