• SQL 中用户定义函数的使用方法


    --用户定义函数的分类:

    /*
    1.标量函数
    2.表值函数
      2.1内联表值函数  返回单个SELECT语句, 它没有相关的返回变量和函数体
      2.2多语句表值函数  是视图和存储过程的结合 可嵌套

    */

    标量函数
    --标量函数
    IF EXISTS(SELECT * FROM sysobjects    WHERE name='fun_SeeEverySortAmount')
        DROP FUNCTION fun_SeeEverySortAmount
    GO
    CREATE FUNCTION fun_SeeEverySortAmount(@class varchar(20))
    RETURNS INT
    AS
        BEGIN
            DECLARE @Amount int
            SELECT @Amount=Amount FROM CommoditySort C INNER JOIN CommodityInfo I ON C.SortId=I.SortId
            WHERE I.CommodityName=@class
            RETURN @Amount
        END
    GO

    执行:

    --执行
    DECLARE @Amount int
    EXEC @Amount= fun_SeeEverySortAmount '苹果iPhone6'
    PRINT '苹果iPhone6的库存量为:'+CONVERT(varchar(20),@Amount)

    结果:

    内联表值函数
    --内联表值函数 返回单个SELECT语句, 它没有相关的返回变量和函数体
    IF EXISTS (SELECT * FROM sysobjects WHERE name='fun_inlineSeeEverySortAmount')
        DROP FUNCTION fun_inlineSeeEverySortAmount
    GO
    CREATE FUNCTION fun_inlineSeeEverySortAmount(@class varchar(20))
    RETURNS table
    AS
        RETURN
            (
                SELECT Amount FROM CommodityInfo I 
                WHERE I.CommodityName=@class
            )
    GO

    执行:

    --执行 调用内联函数和视图的使用一样
    SELECT Amount 数量 FROM fun_inlineSeeEverySortAmount('苹果iPhone6')

    结果:

    多语句表值函数

    --多语句表值函数  是视图和存储过程的结合 可嵌套
    --如果一件商品的销售数量超过3000则为销量品,1000-3000为一般商品,0-1000 为需要促销
    IF EXISTS (SELECT * FROM sysobjects WHERE name='fun_MutilateStatementSalesSort')
        DROP FUNCTION fun_MutilateStatementSalesSort
    GO
    CREATE FUNCTION fun_MutilateStatementSalesSort(@class varchar(20))
    RETURNS @salessort table(
                商品名 varchar(20),
                单价 money,
                商品类型 varchar(20),
                销售量     int,
                商品销售类型 varchar(20)
            )
    AS
        BEGIN
            INSERT INTO @salessort
            SELECT I.CommodityName,I.InPrice,S.SortName,SUM(O.Amount),CASE
                                                                    WHEN SUM(O.Amount)>3000 THEN '销量品'
                                                                    WHEN SUM(O.Amount) BETWEEN 1000 AND 3000 THEN '一般商品'
                                                                    WHEN SUM(O.Amount) BETWEEN 0 AND 1000 THEN '需要促销'
                                                                END
            FROM CommodityInfo I INNER JOIN CommoditySort S ON I.SortId=S.SortId
                                INNER JOIN OrderInfo O ON O.CommodityId =I.CommodityId
            WHERE I.CommodityName=@class
            GROUP BY I.CommodityName,I.InPrice,S.SortName
            RETURN
        END
    GO

    执行:

    --执行 它相当于一个表
    SELECT* FROM fun_MutilateStatementSalesSort('苹果MD760')
    SELECT* FROM fun_MutilateStatementSalesSort('尼康D3300') 
    SELECT* FROM fun_MutilateStatementSalesSort('小米平板')

    结果:

  • 相关阅读:
    hbase java api
    hbase
    误删/usr文件夹解决办法
    死锁问题 代码示例
    H2O 生成 多线程并发控制 Semaphore
    多线程 打印零与奇偶数
    多线程交替打印 采用Semaphore
    多线程按顺序执行
    判断回文数
    整数反转
  • 原文地址:https://www.cnblogs.com/feiquan/p/8679964.html
Copyright © 2020-2023  润新知