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 ...
随机推荐
- 将git文件挂到cdn上
网址:http://raw.githack.com/
- 我是怎么做App token认证的
使用Token来做身份认证在目前的移动客户端上非常流行,Token这个概念来源于OAuth认证,主要是在服务端实现.关于相关的原理,同学们自行百度.在这里,我简单介绍一下我是怎么具体实现的,重点描述t ...
- 在wpf datagrid中,想要根据一个条件来改变datagrid行的背景颜色
原文:在wpf datagrid中,想要根据一个条件来改变datagrid行的背景颜色 在wpf datagrid中,想要根据一个条件来改变datagrid行的背景颜色 例如根据学生的年龄来修改,年龄 ...
- WPF 判断值是不是NaN
原文:WPF 判断值是不是NaN 经常要在StoryBoard用到的 判断方法: Double.IsNaN(你要判断的值)= true// NaN 否则就不是.
- BigTable读后笔记
BigTable读后笔记 GFS可能出现重复记录或者padding,Bigtable如何处理这种情况使得对外提供强一致性模型? ANS: Bigtable写入GFS的数据分为两种: 1)操作日志,当T ...
- [科普]MinGW vs MinGW-W64及其它(比较有意思,来自mingw吧)
部分参照备忘录原文: bitbucket.org/FrankHB/yslib/src/50c3e6344a5a24b2382ce3398065f2197c2bd57e/doc/Workflow.Ann ...
- uwp 沉浸式状态栏
//隐藏状态栏if (ApiInformation.IsTypePresent(typeof(StatusBar).ToString())) { StatusBar statusBar = Statu ...
- NYOJ 298 相变点(矩阵高速功率)
点的变换 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描写叙述 平面上有不超过10000个点.坐标都是已知的.如今可能对全部的点做下面几种操作: 平移一定距离(M),相对X ...
- Android Ant 和 Gradle 包装工艺和效率控制
一个.Ant 包:(下载ant.配置环境变量不说) 1.进入命令行模式,并切换到项目文件夹,运行例如以下命令为ADT创建的项目加入ant build支持: android update project ...
- [转]更改ejs模板后缀.ejs为.html
三种写法 1,express老写法,3.*已经不支持 app.register('.html', require('ejs')); app.set('view engine', 'ejs'); 2, ...