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

/*
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. sql server 锁与事务拨云见日(上)

    一.概述 讲到sql server锁管理时,感觉它是一个大话题,因为它不但重要而且涉及的知识点很多,重点在于要掌握高并发要先要掌握锁与事务,涉及的知识点多它包括各式各样的锁,锁的组合,锁的排斥,锁延伸 ...

  2. karma测试实践

    karma是Google团队开发的一套前端测试运行框架,它不同于测试框架(jasmine,mocha等),它运行在这些测试框架之上,主要完成的工作有: 1.karma启动一个web服务器,生成包含js ...

  3. Windows服务器端口绑定证书

    打开IIS:inetmgr 打开服务:ctrl+shift+Esc 查看证书秘钥: 服务器查看https证书绑定: 1) 查看证书 netsh http show sslcert 2) 将证书与端口绑 ...

  4. shiro 返回json字符串 + 自定义filter

    前言: 在前后端分离的项目中, 在使用shiro的时候, 我们绝大部分时候, 并不想让浏览器跳转到那个页面去, 而是告诉前端, 你没有登录, 或者没有访问权限. 那这时候, 我们就需要返回json字符 ...

  5. Linux常用命令之链接命令和权限管理命令

    目录 1.链接命令 一.生成链接文件命令:ln 2.权限管理命令3.总结 一.更改文件或目录权限命令:chmod 二.改变文件或目录所有者命令:chown 三.改变文件或目录所属组命令:chgrp 四 ...

  6. 为什么LINQ to XML的性能要优于XmlDocument?

    一直很忙,压了很多贴,今天发一篇吧.后面的看心情吧. 今天群里有人问如何解析web.config方便,然后我就推荐了Linq to XML,然后就有人说“我宁可XmlDocument,再SeleteN ...

  7. js forEach跳出循环

    假设当我们只需知道某个数组有没有某个属性,如果找到了直接跳出循环,省略掉剩下的循环步骤是较优化的操作,但是for中是可以利用break跳出循环,但break在forEach中无效,那么forEach能 ...

  8. MyEclipse2017破解设置与maven项目搭建

    下载 版本:MyEclipse2017 Stable 2.0 百度网盘链接:https://pan.baidu.com/s/1vpIMKq9FfMMbhXzkmft_8A 密码:xfbv myecli ...

  9. Python转页爬取某铝业网站上的数据

    天行健,君子以自强不息:地势坤,君子以厚德载物! 好了废话不多说,正式进入主题,前段时间应朋友的请求,爬取了某铝业网站上的数据.刚开始呢,还是挺不愿意的(主要是自己没有完整的爬取过网上的数据哎,即是不 ...

  10. 设计shell脚本选项:getopt

    man 1 getopt翻译:https://www.cnblogs.com/f-ck-need-u/p/9757959.html 写shell脚本的时候,通过while.case.shift来设计脚 ...