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

/*
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())
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(),@Amount)

结果:

内联表值函数
--内联表值函数 返回单个SELECT语句, 它没有相关的返回变量和函数体
IF EXISTS (SELECT * FROM sysobjects WHERE name='fun_inlineSeeEverySortAmount')
DROP FUNCTION fun_inlineSeeEverySortAmount
GO
CREATE FUNCTION fun_inlineSeeEverySortAmount(@class varchar())
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())
RETURNS @salessort table(
商品名 varchar(),
单价 money,
商品类型 varchar(),
销售量 int,
商品销售类型 varchar()
)
AS
BEGIN
INSERT INTO @salessort
SELECT I.CommodityName,I.InPrice,S.SortName,SUM(O.Amount),CASE
WHEN SUM(O.Amount)> THEN '销量品'
WHEN SUM(O.Amount) BETWEEN AND THEN '一般商品'
WHEN SUM(O.Amount) BETWEEN AND 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('小米平板')

结果:

SQL 中用户定义函数的使用方法的更多相关文章

  1. 应用C#和SQLCLR编写SQL Server用户定义函数

    摘要: 文档阐述使用C#和SQLCLR为SQL Server编写用户定义函数,并演示用户定义函数在T-SQL中的应用.文档中实现的 Base64 编码解码函数和正则表达式函数属于标量值函数,字符串分割 ...

  2. SQL中实现SPLIT函数几种方法

    例1 代码如下 复制代码 create function f_split(@SourceSql varchar(8000),@StrSeprate varchar(10))returns @temp ...

  3. SQL SERVER中用户定义标量函数(scalar user defined function)的性能问题

    用户定义函数(UDF)分类  SQL SERVER中的用户定义函数(User Defined Functions 简称UDF)分为标量函数(Scalar-Valued Function)和表值函数(T ...

  4. 调试SQL Server的存储过程及用户定义函数

    分类: 数据库管理 2005-06-03 13:57 9837人阅读 评论(5) 收藏 举报 sql server存储vb.net服务器sql语言 1.在查询分析器中调试 查询分析器中调试的步骤如下: ...

  5. SQL Server 2019 中标量用户定义函数性能的改进

    在SQL Server中,我们通常使用用户定义的函数来编写SQL查询.UDF接受参数并将结果作为输出返回.我们可以在编程代码中使用这些UDF,并且可以快速编写查询.我们可以独立于任何其他编程代码来修改 ...

  6. 【翻译】Flink Table Api & SQL — 用户定义函数

    本文翻译自官网:User-defined Functions  https://ci.apache.org/projects/flink/flink-docs-release-1.9/dev/tabl ...

  7. SQL——用户定义函数

    根据用户定义函数返回值的类型,可将用户定义函数分为如下三个类别: (1) 返回值为可更新表的函数 若用户定义函数包含单个 SELECT 语句且该语句可更新,则该函数返回的表也可更新,这样的函数称为内嵌 ...

  8. Linux Shell管道调用用户定义函数(使shell支持map函数式特性)

    Linux中有一个管道的概念,常用来流式的处理文本内容,比如一个文件对其中的每一行应用好几个操作,出于两个方面的考虑可能需要在管道中使用用户定义函数: 1. 刚需: 内置的sed/awk之类的可能没法 ...

  9. SqlServer——用户定义函数

    根据用户定义函数返回值的类型,可将用户定义函数分为如下三个类别: (1) 返回值为可更新表的函数 若用户定义函数包含单个 SELECT 语句且该语句可更新,则该函数返回的表也可更新,这样的函数称为内嵌 ...

随机推荐

  1. mysql 开发进阶篇系列 14 锁问题(避免死锁,死锁查看分析)

    一. 概述 通常来说,死锁都是应用设计问题,通过调整业务流程,数据库对象设计,事务大小,以及访问数据库的sql语句,绝大部分死锁都可以避免,下面介绍几种避免死锁的常用 方法. 1. 在应用中,如果不同 ...

  2. mysql 开发基础系列21 事务控制和锁定语句(下)

    1.  隐含的执行unlock tables 如果在锁表期间,用start transaction命令来开始一个新事务,会造成一个隐含的unlock tables 被执行,如下所示: 会话1 会话2 ...

  3. SpringBoot 启动概述

    透过现象看本质,SpringApplication 只是将一个典型的Spring应用的启动流程进行了扩展,因此,透彻理解 Spring 容器是打开 Spring Boot 大门的一把钥匙. Sprin ...

  4. win32程序之子窗口编程

    win32程序之子窗口编程 一丶简介.什么是子窗口 在前边我们已经讲解了窗口的本质.以及如何注册窗口类跟创建窗口. 还讲了消息循环. 那么有很多窗口其实Windows已经帮我们创建出来了.我们直接使用 ...

  5. 网络基础知识 - HTTP协议

    前传:HTTP协议的演变过程 HTTP(HyperText Transfer Protocol)协议是基于TCP的应用层协议,它不关心数据传输的细节,主要是用来规定客户端和服务端的数据传输格式,最初是 ...

  6. Mybatis的原理相关

    今天看了一篇有关Mybatis非常好的文章,顺便写了一下学习心得. 原文地址:https://blog.csdn.net/u010349169/article/details/40422941 一.M ...

  7. 南大算法设计与分析课程OJ答案代码(2)最大子序列和问题、所有的逆序对

    问题 A: 最大子序列和问题 时间限制: 1 Sec  内存限制: 4 MB提交: 184  解决: 66提交 状态 算法问答 题目描述 给定一整数序列 a1, a2, …, an,求 a1~an 的 ...

  8. .net敏捷开发框架 力软敏捷开发(learun) 让开发变的更简单

    版本:6.1.6.2 体验地址:www.fishcmonkey.com 联系QQ:6539471

  9. echarts画图时tooltip.formatter参数params不会更新(转载)

    echarts画图时tooltip.formatter参数params不会更新 解决方案: setOption时默认是合并, 如果要全部重新加载 要写成 setOption({},true),这样就可 ...

  10. Python 常用系统模块整理

    Python中的常用的系统模块中部分函数等的整理 random: 随机数 sys: 系统相关 os: 系统相关的 subprocess: 执行新的进程 multiprocessing: 进程相关 th ...