锋盈数科-知识库 Logo
首页
软件开发
计算机基础
Hello Halo
新手必读
关于本知识库
登录 →
锋盈数科-知识库 Logo
首页 软件开发 计算机基础 Hello Halo 新手必读 关于本知识库
登录
  1. 首页
  2. 软件开发
  3. 数据库
  4. 【Sql Server】随机查询一条表记录

【Sql Server】随机查询一条表记录

0
  • 数据库
  • 发布于 2024-08-05
  • 0 次阅读
黄健
黄健

原文链接:https://blog.csdn.net/lmy_520/article/details/139258521

前言

温故而知新,最近在写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)

标量函数接受零个或多个参数,并返回单个值。

xCREATE FUNCTION [schema_name.]function_name

(

    @parameter1 datatype,

    @parameter2 datatype

)

RETURNS return_datatype

AS

BEGIN

    -- 函数逻辑

    RETURN return_value;

END;
-- 调用标量函数

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, EmployeeName

    FROM Employees

    WHERE 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

BEGIN

    INSERT INTO @Employees (EmployeeID, EmployeeName, Salary)

    SELECT EmployeeID, EmployeeName, Salary

    FROM Employees

    WHERE 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

begin

    declare @my_name nvarchar(50)

    select top 1 @my_name=nameValue

    from(

        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 all

        select 5 as id,'张三55' as nameValue union all select 6 as id,'张三66' as name union all

        select 7 as id,'张三77' as nameValue union all select 8 as id,'张三88' as name

    ) a

    where id=1

    --order by CHECKSUM(@newid)

    --print(@my_name)

    return @my_name

end

select dbo.getName(8,newid())

标签: #数据库 67
相关文章

深入理解MySQL InnoDB中的B+索引机制 2024-09-30 14:41

目录 一、InnoDB中的B+ 树索引介绍 二、聚簇索引 (一)使用记录主键值的大小进行排序

mysql中B+树的数据存储 2024-09-29 16:36

B+树索引基础分析 B+树 的定义 B+树是一种自平衡的树形数据结构,常用于数据库和操作系统的索引结构。它具有以下特点: 所有数据都存储在叶子节点,非叶子节点仅存储键值和子节点的指针。 叶子节点之间通过指针相互连接,形成一个有序链表,便于范围查询。 每个节点可以拥有多个键值,键值之间是有序的。 B+

MySQl索引事务(B树) 2024-09-29 16:36

目标: 索引 事务 1.索引 1.1概念 索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现。 1.2作用 数据库中的表、数据、索引之间的关系,类似于书架上的图书、书籍内容和书籍目录的关系。 索引所起的作用类似书籍

MySQL数据库的备份与恢复 2024-09-26 17:57

MySQL数据库的备份与恢复 在现代信息时代,数据已成为企业和个人的重要资产,数据的安全性和可恢复性直接影响到业务的连续性和稳定性。MySQL作为广泛使用的关系型数据库管理系统,其数据的备份与恢复显得尤为重要。本文将详细探讨MySQL数据库的备份与恢复策略,包括备份的重要性、备份类型、常用备份方法及

MySQL中创建数据库和表 2024-09-26 17:57

在MySQL中创建数据库和表是数据库管理的基础步骤,它们构成了数据存储和操作的基础结构。下面,我将详细介绍如何在MySQL中创建数据库和表,包括创建数据库的基本语法、设计表的考虑因素、表的创建过程、数据类型和约束的使用等,力求内容详尽且不少于2000字。 一、创建数据库 在MySQL中,数据库是一个

MySQL数据库主从搭建(详细图文) 2024-09-28 15:11

MySQL数据库主从搭建(详细图文) 前言 主从原理: MySQL之间数据复制的基础是二进制日志文件(binary log file)。一台MySQL数据库一旦启用二进制日志后,其作为master,它的数据库中所有操作都会以"事件"的方式记录在二进制日志中,其他数据库作为slave通过一个I/O线程

目录

IT 外包服务商

  • 意见投递
  • zyf6619

软件开发应用

主菜单

  • 首页
  • 软件开发
  • 计算机基础
  • Hello Halo
  • 新手必读
  • 关于本知识库
Copyright © 2024 your company All Rights Reserved. Powered by Halo.