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 ...
随机推荐
- js之美
http://fxck.it/post/72326363595 大部分脚本语言里字面量都要快一些,因为解析[]比解析new Array()步骤少的多 关于Object可以用constructor注入的 ...
- Multi-tasking RTOS for microprocessors with limited memory by saving only a single return address per task during context switching
A real-time operating system (RTOS) for use with minimal-memory controllers has a kernel for managin ...
- WPF公章制作之2
原文:WPF公章制作之2 早前,我曾写过一篇:"在WPF中制作正圆形公章"(http://blog.csdn.net/johnsuna/archive/2007/10/12/182 ...
- jquery validate 详细说明
jQuery校验 官网地址:http://bassistance.de/jquery-plugins/jquery-plugin-validation 一导入js库 <script src=&q ...
- matlab 高级函数
2*randn(sz):0 均值,方差为 4(variance), standard deviation:标准差为 2: numel():returns the # of elements: nume ...
- UVa 11400 Lighting System Design(DP 照明设计)
意甲冠军 地方照明系统设计 总共需要n不同类型的灯泡 然后进入 每个灯电压v 相应电压电源的价格k 每一个灯泡的价格c 须要这样的灯泡的数量l 电压低的灯泡能够用电压高的灯泡替换 ...
- WPF 自定义图片剪切器 - 头像剪切(扩展与完善、实时截图)
原文:WPF 自定义图片剪切器 - 头像剪切(扩展与完善.实时截图) 一.说明:上一次写的"WPF 自定义图片剪切器 - 头像剪切.你懂得"存在明显的缺陷,由于篇幅较长.重新写了一 ...
- WPF - 资源收集
原文:WPF - 资源收集 OpenExpressApp的UI现在是使用WPF,所以熟悉WPF是必须的,以下我将可能用到的一些相关内容随时记录下来,以备查阅.此篇文章将不断更新,感兴趣的可以看看,也欢 ...
- 毕业设计之感悟 —— UML 与 ER 图
今天毕业设计答辩,虽然我第一个上场,但是不是特别紧张,因为整个系统都是我写的.我以为自己天衣无缝,能应付所有老师的所有问题.事实上,我被老师教育了一番. 老师说我,毕业论文中没有一个类.我一开始比较懵 ...
- Win8 Metro(C#) 数字图像处理--1 图像打开,保存
原文:Win8 Metro(C#) 数字图像处理--1 图像打开,保存 作为本专栏的第一篇,必不可少的需要介绍一下图像的打开与保存,一便大家后面DEMO的制作. Win8Metro编程中,图像相关 ...