sqlserver 中的表值函数和标量函数

news2024/11/28 18:53:35

目录

一、表值函数

1.内联表值函数

1.创建函数

2.调用函数

3.返回结果

2.多语句的表值函数

2.调用函数

3.返回结果

3.内联表值函数和多语句的表值函数的区别

1.语法上

2.结构上

二、标量函数

1.创建函数

2.调用函数

2.返回结果

总结


一、表值函数

表值函数是返回一个Table类型 Table类型相当与一张存储在内存中的一张虚拟表,

表值函数 又分为内联表值函数和多语句表值函数

1.内联表值函数

创建内联表值函数很简单。内联表值函数的内容是一条带参数的SELECT语句。返回数据类型永远是表,不过返回表的结构由来SELECT语句的结构定义

    1.创建函数

        代码如下(示例):

CREATE FUNCTION test
(	
 @id  int --入参
)
RETURNS TABLE  --返回类型为表
AS
RETURN 
(	
	
	  select * from (   SELECT '1' as id, '小王' as name
	   union
	    SELECT '2'  as id,'小李' as name
		  union
		SELECT '3'  as id,'小周' as name
		  union
	    SELECT '4'  as id,'小赵' as name ) temp
		where id=@id  --返回指定条件的数据源
)
GO

    2.调用函数

        代码如下(示例):

select * from test(1)

   3.返回结果

  

2.多语句的表值函数

多语句表值函数允许多条语句来创建表的内容。多语句表值函数可以用来替换使用多个步骤来构建结果集的存储过程。

多语句表值函数允许开发人员使用多个步骤动态地填充表,这一点与存储过程类似,不过它们可以在SELECT语句中像表那样被引用。

使用多语句表值函数时,表的结构必须在函数头定义。要为表使用一个变量名,并且所有修改数据的操作只能引用表变量。

     1.创建函数

代码如下 (示例):

CREATE FUNCTION test1
(	
 @id  int
)
RETURNS @t TABLE --定义表
(
	-- Add the column definitions for the TABLE variable here
	 name  nvarchar(50)--定义字段
)
AS
BEGIN
      insert into @t --向表插入数据

	  select name from (   SELECT '1' as id, '小王' as name
	   union
	    SELECT '2'  as id,'小李' as name
		  union
		SELECT '3'  as id,'小周' as name
		  union
	    SELECT '4'  as id,'小赵' as name ) temp
		where id=@id	--查询符合条件的数据
	 RETURN --返回数据源
END
GO

      

2.调用函数

        代码如下(示例):

select * from test1(1)

3.返回结果

    

    

3.内联表值函数和多语句的表值函数的区别

   1.语法上

   内联表值函数 as后面没有begin/end,只有一个return语句返回特定的记录

   语句表值函数 as 在begin/end语句块中,直接将需要返回的结果insert到returns定义的表中就可     以了,在最后return时,会将结果返回

    2.结构上

    内联表返回的表结构由来SELECT语句的结构定义

    多语句表值函数返回 内部定义的表结构进行返回

二、标量函数

标量值函数返回一个确定类型的标量值,其返回类型除text、ntext、image、cursor、timestamp、和table类型外的其他数据类型,函数体语句定义在begin-end内部。在returns(注意有带s)语句后定义返回值的数据类型,并且函数的最后一条语句必须为return

1.创建函数

例如:

CREATE FUNCTION 函数名(参数)
RETURNS 返回类型
AS
BEGIN
	SQL语句
	RETURN;
END

    例如 获取两个时间差,返回相差几天几小时几分几秒

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		<Author,,Name>
-- Create date: <Create Date, ,>
-- Description:	<Description, ,>
-- =============================================
CREATE FUNCTION test2
(
	@Stime datetime,
	@Etime datetime
)
RETURNS nvarchar(20)
AS
BEGIN

declare @day int
declare @hour int
declare @min int
declare @sec int
declare @alls int
declare @result  nvarchar(20)
set @alls=datediff(s,@Stime,@Etime)   --时间@Etime与时间@Stime之间的差
set @day=@alls/86400
set @hour=(@alls-@day*86400)/3600
set @min=(@alls-@day*86400-@hour*3600)/60
set @sec=@alls-@day*86400-@hour*3600-@min*60
set @result=CAST(@day as varchar(5))+'天'+CAST(@hour as varchar(2))+'小时'+CAST(@min as varchar(2))+'分'+CAST(@sec as varchar(2))+'秒'

return @result
END
GO

2.调用函数

必须使用两部分组成函数的名字来调用函数,即架构.对象名

例如 计算2008-08-08 12:00 到现在相差多少天

select dbo.test2('2008-08-08 12:00',GETDATE())

2.返回结果

如下


总结

表值函数看作返回一个虚拟的表,可以看作带有入参的视图

标量函数理解来说 返回一个类型的标量值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/524241.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023年必备!这些值得信赖的问卷调查工具

随着我们进入2023年&#xff0c;可靠的调查问卷工具对研究和数据收集的重要性比以往任何时候都更加明显。随着在线调查和远程数据收集的兴起&#xff0c;越来越多的用户和企业都开始注重数据安全&#xff0c;所以使用值得信赖和有效的工具至关重要。在这篇文章中&#xff0c;小…

Spring的第十六阶段:数据库的事务隔离级别

数据库事务隔离级别 1、为什么会出现数据库的隔离级别呢? 数据库隔离级别是为了解决数据库并发访问过程中产生的各种数据安全问题. 四种事务隔离级别&#xff1a; 一&#xff1a;读未提交 read uncommitted 二&#xff1a;读已提交 read committed ( oracle默认 ) 三&…

教大家如何使用VS Code远程开发ubuntu和服务器项目

目录 前提条件 一、ubuntu中安装openssh服务器 二、配置本地VSCode 三、本地查看、编辑ubuntu中的代码 前提条件 1.本地已经安装了Visual Studio Code IDE软件&#xff0c; 2.ubuntu虚拟机安装完成 一、ubuntu中安装openssh服务器 1.1使用如下命名进行安装&#xff1a; …

测试老鸟总结,性能测试常见测试缺陷,卷出高级突破测试圈...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 性能测试&#xf…

【机器学习】LightGBM 解读 (集成学习_Boosting_GBM)

【机器学习】LightGBM 解读 &#xff08;集成学习_Boosting_GBM&#xff09; 文章目录 【机器学习】LightGBM 解读 &#xff08;集成学习_Boosting_GBM&#xff09;1. 介绍2. 数据预处理2.1 基于梯度的单边采样&#xff08;GOSS&#xff09;2.2 互斥特征捆绑&#xff08;EFB&am…

免费安装注册 IDM 使用流程,简单方便易操作 IDM 在B站没有显示下载按钮

文章目录 下载 IDM运行脚本winr快捷键调出运行窗口输入powershell并运行上述脚本开始注册注册成功IDM 在B站没有显示下载按钮 下载 IDM 官网链接&#xff1a;Internet Download Manager: The fastest download accelerator 运行脚本 # Enable TLSv1.2 for compatibility wi…

多目标优化算法求解无人机三维路径规划

一、无人机模型 无人机三维路径规划是无人机在执行任务过程中的非常关键的环节&#xff0c;无人机三维路径规划的主要目的是在满足任务需求和自主飞行约束的基础上&#xff0c;计算出发点和目标点之间的最佳航路。 1.1路径成本 无人机三维路径规划的首要目标是寻找起飞点和目…

Python学习19:输出斐波拉契数列的前n项

描述&#xff1a; 斐波那契数列&#xff08;Fibonacci sequence&#xff09;&#xff0c;又称黄金分割数列、因数学家列昂纳多斐波那契&#xff08;Leonardoda Fibonacci&#xff09;以兔子繁殖为例子而引入&#xff0c;故又称为“兔子数列”&#xff0c;指的是这样一个数列&a…

Unity2019配置JDK、SDK、NDK、Gradle

用Unity开发了一个使用AR Foundation的小项目&#xff0c;导出项目需要在安卓手机上进行测试。在导出时遇到了配置环境的问题&#xff0c;查找了很多方法终于解决。记录一下。 我所使用的unity版本是2019.2.12f。在完成项目需要导出时&#xff0c;在首选项设置中需要设置JDK、…

我的职业转型之路:从点工到自动化测试工程师仅用了四个月

目录 引言 1、知识体系化 2、我的成长路线 功能测试——>UI自动化 UI自动化——>接口自动化 接口自动化——>性能测试 软件测试工程师发展规划路线 一、测试基础 二、Linux必备知识 三、Shell脚本 四、互联网程序原理 五、MySQL数据库 六、抓包工具 七、…

Altium designer—STM32F103C8T6最小系统原理图

分享使用Altium designer软件绘制的STM32F103C8T6最小系统电路原理图 亲测可用&#xff0c;完整电路文件资源见文末链接 一、电路原理图 STM32F103C8T6是STM32入门级的芯片&#xff0c;性价比很高&#xff0c;资源相对比较丰富&#xff0c;该最小系统包括STM32F103C8T6芯片、…

使用预定义类

目录 &#x1f345; 一、对象与对象变量 &#x1f34e; 二、Java类库中的LocalDate类 &#x1f96d; 三、更改器方法与访问器方法 &#x1f9d1;‍&#x1f4bb;CSDN主页&#xff1a;夏志121的主页 &#x1f4cb;专栏地址&#xff1a;Java核心技术专栏 在Java中&#xff0c;…

形态学图像处理和图像分割MATLAB实验

文章目录 一、实验目的二、实验内容1. 开运算和闭运算实验。2. 用形态学处理提取边界。4. 全局阈值处理。 一、实验目的 理解腐蚀和膨胀的原理&#xff0c;掌握开运算、闭运算及形态学的边界提取。掌握孤立点检测、线检测和边缘检测的方法。掌握全局阈值处理的方法。 二、实验…

2023 上半年软件设计师知识点复习总纲

前言&#xff1a;全国计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试&#xff08;以下简称IT职业资格考试&#xff09;是由中华人民共和国人事部主管&#xff0c;国家计算机网络与信息安全管理中心主办的一项国家级、权威性的计算机职业技能水平认证考试。主要…

【人力资源管理】第4集 免费开源ERP: Odoo 16 Appraisal员工绩效评估 构建一体化企业人力资源管理

文章目录 前言一、概览二、主要功能1.设置定期的员工评估2.构建正确的评估3.设计您自己的调查4.自动评估过程 总结 前言 在员工工作中创建评估。同时审查员工表现。 一、概览 员工评价 评估内容 目标制定 评价指标 评价分析 二、主要功能 1.设置定期的员工评估 强化贵公司的…

Learning C++ No.21 【AVL树实战】

引言&#xff1a; 北京时间&#xff1a;2023/5/13/10:13&#xff0c;饥肠辘辘&#xff0c;为了将红黑树的博客赶出来&#xff0c;导致现在还没有吃早饭&#xff0c;所以现在先容我去吃一下早饭&#xff0c;ok&#xff0c;转眼一看&#xff0c;12:25&#xff0c;哈哈哈&#xf…

Linux上传文件至GitHub

Linux上传文件至GitHub 1、安装 git 并 生成密钥1.1 安装 git 并 绑定用户信息1.2 生成密钥 并 复制于 Github 2、生成远程仓库3、文件上传 本篇文章将讲述在Linux上如何通过 git 上传文件到 Github 账户中的目标远程库 &#xff01;主要内容如下。 1、安装 git 并 生成密钥 …

2023年测试工程师核心竞争力?功能到自动化测试开发收割28k的offer...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 Python自动化测试&…

如何使用Wireshark软件分析TCP协议

在学习网络相关知识的时候&#xff0c;需要对网络协议进行分析。网络协议分析软件用的最多的就是 Wireshark 这个软件&#xff0c;今天就简单总结一下如何使用这个软件进行TCP三次握手和四次挥手的查看。   要查看三次握手和四次挥手的数据&#xff0c;那么就必须找一个软件有…

Pr 拍立得风格图片展示

哈喽&#xff0c;各位小伙伴&#xff01;今天我们来学习一下如何制作拍立得风格的照片展示效果&#xff1f; 新建三个序列 在开始之前&#xff0c;我们需要新建三个序列 序列1&#xff1a;总合成-尺寸1902*1080序列2&#xff1a;照片合成-尺寸1920*1080序列3&#xff1a;照片…