苏州做网站公司 速选苏州聚尚网络,怎么代理传奇手游,主页导航网站建设定制,信贷 网站模板 下载大家好#xff0c;我是全栈小5#xff0c;欢迎来到《小5讲堂》。 这是《Sql Server》系列文章#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示#xff1a;博主能力有限#xff0c;理解水平有限#xff0c;若有不对之处望指正#xff01; 目录 前言随机查询语… 大家好我是全栈小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_namenameValuefrom(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 id1--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】新手一分钟看懂在已有表基础上修改字段默认值和数据类型 总结温故而知新不同阶段重温知识点会有不一样的认识和理解博主将巩固一遍知识点并以实践方式和大家分享若能有所帮助和收获这将是博主最大的创作动力和荣幸。也期待认识更多优秀新老博主。