zoukankan      html  css  js  c++  java
  • 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('小米平板')

    结果:

  • 相关阅读:
    C#模拟键盘登录网站
    利用c#开发一个telnet unix服务器或者防火墙的小工具(转)
    Fckeditor XML Request error:internal server error (500) 一例
    CSS格式模板
    TFS 2008: Message that "solution not currently configured for integrated source control in Visual Studio"
    学习笔记Javascript事件Event、IE浏览器下的拖拽效果
    学习笔记验证控件
    学习笔记Socket编程、任务栏图标和MD5散列算法
    学习笔记Web服务、Remoting、WCF (上) Web服务
    学习笔记Web服务、Remoting、WCF (下) Remoting and WCF
  • 原文地址:https://www.cnblogs.com/feiquan/p/8679964.html
Copyright © 2011-2022 走看看