sqlserver 表值函数与标量值函数
除了在我们常用的程序开发中要用到函数外,在sql语句中也常用到函数,不论哪种,思想都没有变,都是为了封装,可复用。
创建的方法和整体结构都大体相同,都少不了函数名,函数的形参,返回值等这些。
一、表值函数
从名字可知,表值函数,是将表作为值进行返回的函数。请看本人项目中的一个表值函数:
- USE [cnpc]
- GO
- /****** Object: UserDefinedFunction [dbo].[FUN_EaScoreDetail] Script Date: 2019/7/1 星期一 下午 3:50:49 ******/
- SET ANSI_NULLS ON
- GO
- SET QUOTED_IDENTIFIER ON
- GO
- -- =============================================
- -- Author: <Author,,zhengwei>
- -- Create date: <Create Date,,>
- -- Description: <Description,立项考核明细表,给立项考核统计提供最基本的数据,很多地方会用到这个函数,不要轻易修改,>
- -- =============================================
- CREATE FUNCTION [dbo].[FUN_EaScoreDetail] (@unitcode nvarchar(),@startdate datetime,@enddate datetime)
- RETURNS
- @scoreResult TABLE
- (
- EaId int,
- Createdtime datetime,
- ApplyUnitCode nvarchar(),
- updateG int,
- ReturnG int,
- AdjustG int,
- TerminatedG int,
- Score float
- )
- AS
- BEGIN
- insert into @scoreResult
- select s.EaId EaId,min(e.createdtime) Createdtime,e.unit_code ApplyUnitCode,
- sum(case ScoreType when 'Upload' then else end) as updateG,
- sum(case ScoreType when 'Reply' then else end) as ReturnG,
- sum(case ScoreType when 'Adjust' then else end) as AdjustG,
- sum(case ScoreType when 'Terminated' then else end) as TerminatedG,
- (case min(s.IncreaseOrReduceScore) when then else (+min(s.IncreaseOrReduceScore)) end) as Score
- from EaScoreDetail s
- inner join Ea e on e.id=s.EaId
- inner join unitinfo u on e.unit_code = u.dm
- where e.createdtime BETWEEN @startdate and @enddate
- and e.unit_code like @unitcode+'%'
- group by s.EaId,e.unit_code
- RETURN
- END
表值函数的返回结果为一个表,那么首先就是要创建一个表@scoreResult ,并声明了表中一些字段的,最后将查询的结果插入这个表中,注意,插入结果中select后面字段的顺序要与声明表进字段的顺序相同。
二、标量值函数
从名字可知,表值函数,是将一个值进行返回的函数。请看本人项目中的一个标量值函数:
- USE [cnpc]
- GO
- /****** Object: UserDefinedFunction [dbo].[FUN_getPassportQualityScore] Script Date: 2019/7/1 星期一 下午 3:58:50 ******/
- SET ANSI_NULLS ON
- GO
- SET QUOTED_IDENTIFIER ON
- GO
- Create function [dbo].[FUN_getPassportQualityScore] (
- @approvalCount float,
- @successApprovalCount float,
- @borrowCount float,
- @overtimeUnReturnCount float,
- @unBorrowVisaCount float,
- @unBorrowForTK float
- )
- returns nvarchar()
- as begin
- declare @passportQualityScore float,
- @collectionRate float,
- @legalRate float,
- @passRate float
- set @collectionRate=
- set @legalRate =
- set @passRate =
- ---- 收缴率
- if(@borrowCount>)
- set @collectionRate = - @overtimeUnReturnCount/@borrowCount
- ---- 合规借出率
- if((@unBorrowVisaCount+@unBorrowForTK+@borrowCount)>)
- set @legalRate = @borrowCount/(@unBorrowVisaCount+@unBorrowForTK+@borrowCount)
- ---- 一次办理合格率
- if(@approvalCount>)
- set @passRate = @successApprovalCount/@approvalCount
- ----质量总分(也就是最终要返回的结果)
- set @passportQualityScore = (@collectionRate + @legalRate+@passRate)/0.03
- return round(@passportQualityScore,)
- end
标量值函数返回的值为一个数字,也就是将传入的参数通过计算得到一个结果。
三、表值函数与标量值函数的使用
1、在存储过程中使用表值函数与使用数据库中的表是一样的。直接调用并传入需要的参数就可,如下:
sqlserver 表值函数与标量值函数的更多相关文章
- sqlserver自定义函数(标量值函数,表值函数)
用户自定义的函数有两类:表值函数.标量值函数. 表值函数:返回值是数据表的函数 调用方式 select b.* from tableA a accross apply Fun_BiaoZhiFun ...
- SQL表值函数和标量值函数的区别
SQL表值函数和标量值函数的区别 写sql存储过程经常需要调用一些函数来使处理过程更加合理,也可以使函数复用性更强,不过在写sql函数的时候可能会发现,有些函数是在表值函数下写的有些是在标量值下写的, ...
- sqlserver中的表值函数和标量值函数
顾名思义:表值函数返回的是表,而标量值函数可以返回基类型 一.表值函数 用户定义表值函数返回 table 数据类型.对于内联表值函数,没有函数主体:表是单个 SELECT 语句的结果集. 以下示例创建 ...
- sql 表值函数与标量值函数
写sql存储过程经常需要调用一些函数来使处理过程更加合理,也可以使函数复用性更强,不过在写sql函数的时候可能会发现,有些函数是在表值函数下写的有些是在标量值下写的,区别是表值函数只能返回一个表,标量 ...
- sql server 中的表值函数和标量值函数
顾名思义:表值函数返回的是表,而标量值函数可以返回基类型 一.表值函数 用户定义表值函数返回 table 数据类型.对于内联表值函数,没有函数主体:表是单个 SELECT 语句的结果集. 以下示例 ...
- sql中的表值函数与标量值函数区别与用法
通俗来讲: 听名字就知道区别了 表值函数返回的是一张表结果,就和一个select查询语句一样,只不过里面带入了参数或者很复杂:标量值函数返回的只是一个值 一 .表值函数又分为内联函数与多语句函数 (1 ...
- Python函数01/函数的初识/函数的定义/函数调用/函数的返回值/函数的参数
Python函数01/函数的初识/函数的定义/函数调用/函数的返回值/函数的参数 内容大纲 1.函数的初识 2.函数的定义 3.函数的调用 4.函数的返回值 5.函数的参数 1.函数初识 # def ...
- EF中使用数据库的标量值函数
参考资料:https://msdn.microsoft.com/zh-cn/library/dd456847(v=vs.110).aspx http://stackoverflow.com/quest ...
- 常用Sql 标量值函数
1.汉字拼音首字母 /****** Object: UserDefinedFunction [dbo].[fnGetHzPY] Script Date: 08/16/2018 09:04:47 Des ...
随机推荐
- Numpy Usage Introduction
Reference : http://my.oschina.net/u/175377/blog/74406 试验性的Numpy教程 原文来自Tentative NumPy Tutorial 目录 先决 ...
- VAssist 使用技巧(函数声明定位,比VS的还要强大)
1. 有了VAX可以关掉C++导航栏,快捷键ALT+M,显示当前打开文档的所有符号,而且可以输入进行过滤 2. 查找文件,shift+alt+o (直接定位) 3. 查找符号shift+alt+s 4 ...
- OpenCV图像修复
在OpenCV的"photo.hpp"中定义了一个inpaint函数,可以用来实现图像的修复和复原功能,inpaint函数的原型如下: void inpaint( InputArr ...
- Java利用Zxing生成二维码
Zxing是Google提供的关于条码(一维码.二维码)的解析工具,提供了二维码的生成与解析的方法,现在我简单介绍一下使用Java利用Zxing生成与解析二维码 1.二维码的生成 1.1 将Zxing ...
- 异步Servlet的理解与实践
AsyncContext理解 Servlet 3.0(JSR315)定义了Servlet/Filter的异步特性规范. 怎么理解"异步Servlet/Filter"及其使用情景? ...
- Spring MVC专题
Spring从3.1版本开始增加了ConfigurableEnvironment和PropertySource: ConfigurableEnvironment Spring的ApplicationC ...
- MIS的趋势必定是围绕机器取代人手,分工越来越细(小餐厅都支持微信自助点餐,结账时就打个折,相当于省了1、2个人手,SQL发明以后,程序员的工作更多了)
最后,我还想简略的谈谈MIS及MIS快速开发工具的未来. MIS的趋势必定是围绕机器取代人手,分工越来越细.比如:现在有些小型的咖啡厅里的财务子系统就简单到不需要使用者有会计知识,相当于省了会计人手: ...
- easyui Full Layout
@{ Layout = null;}<!DOCTYPE html><html><head> <meta name="viewport&q ...
- 终端开发补充 : 读 curses模块官方文档...
curses是一个提供终端屏幕打印和键盘处理的库, 我个人的理解就是终端里的gui(当然它是基于文本的)... 写2048的时候用到了这个库, 所以现在过来好好研究一下这个库... 下面是文档内容 : ...
- C#基于用户和角色的验证,服务端web 客户端wpf
应用程序服务 <?xml version="1.0"?> <!-- For more information on how to configure your ...