【Sql Server】随机查询一条表记录,并重重温回顾下自定义函数的封装和使用

本文主要是介绍【Sql Server】随机查询一条表记录,并重重温回顾下自定义函数的封装和使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

大家好,我是全栈小5,欢迎来到《小5讲堂》。
这是《Sql Server》系列文章,每篇文章将以博主理解的角度展开讲解。
温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!

在这里插入图片描述

目录

  • 前言
  • 随机查询语句
  • 自定义函数
    • 基本概念
    • 函数格式
    • 函数例子
    • 函数封装
  • 文章推荐

前言

温故而知新,最近在写sql查询语句,需求是随机查询表的其中一条记录。
基于这个查询,顺便把数据库自定义函数、存储过程这个两个知识点重温固定下。
因此,本篇文章将在随机查询一条表记录的基础上,把sql语句封装到函数和存储过程里。

随机查询语句

要在SQL Server中随机生成一条记录,可以使用ORDER BY NEWID()来随机排序结果集,并使用TOP 1来限制结果集返回一条记录。
例如:

select top 1 * 
from(
select '张三11' as name union all select '张三22' as name union all 
select '张三33' as name union all select '张三44' as name union all
select '张三55' as name union all select '张三66' as name union all
select '张三77' as name union all select '张三88' as name
) a
order by newid()select '张三11' as name union all select '张三22' as name union all 
select '张三33' as name union all select '张三44' as name union all
select '张三55' as name union all select '张三66' as name union all
select '张三77' as name union all select '张三88' as name

在这里插入图片描述

自定义函数

基本概念

SQL Server中的函数可以分为两类:系统函数和用户自定义函数。
1.系统函数
这些函数是由SQL Server提供的内置函数,用于执行各种操作,如字符串处理、数学运算、日期时间处理等。
例如,LEN()用于返回字符串的长度,GETDATE()用于返回当前日期和时间等。
2.用户自定义函数
这些函数是用户根据自己的需求自定义的函数,可以根据业务逻辑执行特定的操作。
用户自定义函数分为以下几种类型:

  • 标量函数(Scalar Function):接受零个或多个参数,并返回单个值。
  • 表值函数(Table-Valued Function):接受零个或多个参数,并返回一个表作为结果集。
  • 内联表值函数(Inline Table-Valued Function):类似于表值函数,但是可以直接在查询中调用,并且返回的表可以与其他表进行联接。
  • 多语句表值函数(Multi-Statement Table-Valued Function):与内联表值函数不同,它可以包含多条SQL语句,并且使用RETURN语句返回结果集。
    用户自定义函数可以帮助简化复杂的查询和数据处理操作,并提高代码的可维护性和可重用性。

函数格式

在 SQL Server 中,函数的基本格式如下:

CREATE FUNCTION [schema_name.]function_name
(@parameter1 datatype,@parameter2 datatype
)
RETURNS return_datatype
AS
BEGIN-- 函数逻辑RETURN return_value;
END;
  • schema_name:函数所属的模式(可选)。
  • function_name:函数的名称。
  • @parameter1, @parameter2:函数的参数列表,包括参数名和数据类型。
  • return_datatype:函数的返回值数据类型。
  • RETURN return_value:函数体内的逻辑操作,可以包括各种 SQL 语句和控制流程,最终通过 RETURN 语句返回结果。

函数例子

当在 SQL Server 中创建自定义函数时,可以选择创建标量函数、表值函数或者内联表值函数。
以下是创建这些类型函数的基本方法示例:
1. 创建标量函数(Scalar Function)
标量函数接受零个或多个参数,并返回单个值。

-- 创建标量函数CREATE FUNCTION dbo.CalculateAge
(@BirthDate DATE
)
RETURNS INT
AS
BEGINDECLARE @Age INT;SET @Age = DATEDIFF(YEAR, @BirthDate, GETDATE());RETURN @Age;
END;
GO-- 调用标量函数SELECT dbo.CalculateAge('1990-01-01') AS Age;

2. 创建表值函数(Table-Valued Function)
表值函数可以返回一个表作为结果集。
内联表值函数(Inline Table-Valued Function)
内联表值函数可以直接在查询中使用。

-- 创建内联表值函数CREATE FUNCTION dbo.GetEmployeesByDepartment
(@DepartmentID INT
)
RETURNS TABLE
AS
RETURN
(SELECT EmployeeID, EmployeeNameFROM EmployeesWHERE DepartmentID = @DepartmentID
);
GO-- 调用内联表值函数SELECT * FROM dbo.GetEmployeesByDepartment(1);

多语句表值函数(Multi-Statement Table-Valued Function)
多语句表值函数包含多条 SQL 语句,并使用 RETURN 语句返回结果集。

-- 创建多语句表值函数CREATE FUNCTION dbo.GetEmployeesBySalaryRange
(@MinSalary DECIMAL(10, 2),@MaxSalary DECIMAL(10, 2)
)
RETURNS @Employees TABLE
(EmployeeID INT,EmployeeName NVARCHAR(100),Salary DECIMAL(10, 2)
)
AS
BEGININSERT INTO @Employees (EmployeeID, EmployeeName, Salary)SELECT EmployeeID, EmployeeName, SalaryFROM EmployeesWHERE Salary BETWEEN @MinSalary AND @MaxSalary;RETURN;
END;
GO-- 调用多语句表值函数SELECT * FROM dbo.GetEmployeesBySalaryRange(30000, 50000);

函数封装

在封装的时候,函数内部也是会有一些限制,比如下面:
在函数内对带副作用的运算符 ‘newid’ 的使用无效。
在函数内对带副作用的运算符 ‘PRINT’ 的使用无效。
在这里插入图片描述
在这里插入图片描述

create function getName
(@id int,
@newid varchar(50))
returns nvarchar(50)
as
begindeclare @my_name nvarchar(50)select top 1 @my_name=nameValuefrom(select 1 as id,'张三11' as nameValue union all select 2 as id,'张三22' as name union all select 3 as id,'张三33' as nameValue union all select 4 as id,'张三44' as name union allselect 5 as id,'张三55' as nameValue union all select 6 as id,'张三66' as name union allselect 7 as id,'张三77' as nameValue union all select 8 as id,'张三88' as name) awhere id=1--order by CHECKSUM(@newid)--print(@my_name)return @my_name
endselect dbo.getName(8,newid())

文章推荐

【Sql Server】随机查询一条表记录,并通过函数方式进行封装使用

【Sql Server】锁表如何解锁,模拟会话事务方式锁定一个表然后进行解锁

【Sql Server】通过Sql语句批量处理数据,使用变量且遍历数据进行逻辑处理

【新星计划回顾】第六篇学习计划-通过自定义函数和存储过程模拟MD5数据

【新星计划回顾】第四篇学习计划-自定义函数、存储过程、随机值知识点

【Sql Server】Update中的From语句,以及常见更新操作方式

【Sql server】假设有三个字段a,b,c 以a和b分组,如何查询a和b唯一,但是c不同的记录

【Sql Server】新手一分钟看懂在已有表基础上修改字段默认值和数据类型

总结:温故而知新,不同阶段重温知识点,会有不一样的认识和理解,博主将巩固一遍知识点,并以实践方式和大家分享,若能有所帮助和收获,这将是博主最大的创作动力和荣幸。也期待认识更多优秀新老博主。

这篇关于【Sql Server】随机查询一条表记录,并重重温回顾下自定义函数的封装和使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1010809

相关文章

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

C++ Primer 多维数组的使用

《C++Primer多维数组的使用》本文主要介绍了多维数组在C++语言中的定义、初始化、下标引用以及使用范围for语句处理多维数组的方法,具有一定的参考价值,感兴趣的可以了解一下... 目录多维数组多维数组的初始化多维数组的下标引用使用范围for语句处理多维数组指针和多维数组多维数组严格来说,C++语言没

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

在 Spring Boot 中使用 @Autowired和 @Bean注解的示例详解

《在SpringBoot中使用@Autowired和@Bean注解的示例详解》本文通过一个示例演示了如何在SpringBoot中使用@Autowired和@Bean注解进行依赖注入和Bean... 目录在 Spring Boot 中使用 @Autowired 和 @Bean 注解示例背景1. 定义 Stud

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

oracle DBMS_SQL.PARSE的使用方法和示例

《oracleDBMS_SQL.PARSE的使用方法和示例》DBMS_SQL是Oracle数据库中的一个强大包,用于动态构建和执行SQL语句,DBMS_SQL.PARSE过程解析SQL语句或PL/S... 目录语法示例注意事项DBMS_SQL 是 oracle 数据库中的一个强大包,它允许动态地构建和执行

SQL 中多表查询的常见连接方式详解

《SQL中多表查询的常见连接方式详解》本文介绍SQL中多表查询的常见连接方式,包括内连接(INNERJOIN)、左连接(LEFTJOIN)、右连接(RIGHTJOIN)、全外连接(FULLOUTER... 目录一、连接类型图表(ASCII 形式)二、前置代码(创建示例表)三、连接方式代码示例1. 内连接(I