SQL Server 数据库之变量

2023-10-27

1. 变量概述

变量名是一个合法的标识符;T-SQL语言包括两种形式的变量:用户自定义的局部变量和系统提供的全局变量;

1.1 常规标识符

ASCII 字母、Unicode 字符、下划线(_)、@ 或 # 开头,后续可跟一个或若干个 ASCII 字符、Unicode 字符、下划线(_)、美元符号($),但不能全为下划线(_)、@ 或 #;

1.2.分隔标识符

包含在双引号()或方括号([ ])内的常规标识符不符合常规标识符规则的标识符;

2. 局部变量

局部变量是一个能够拥有特定数据类型的对象,它的作用范围仅限在程序内部;局部变量是用于保存特定类型的单个数据值的变量;
在 T-SQL 语言中,局部变量必须先定义再使用

2.1. 局部变量声明

在 T-SQL 语言中,用户能使用 DECLARE 语句声明变量,包含局部变量;
在声明变量方面需要注意如下3个方面:

  1. 为变量指定名称,且名称的第一个字符必须为 @;
  2. 指定该变量的数据类型和长度;
  3. 默认情况下将该变量设置为 NULL

用户还能在一个 DECLARE 语句中声明多个变量,多个变量之间使用逗号分开;
语法格式如下:

DECLARE  {@local_variable data_type} [ ,...n]
  1. @local_variable:指定局部变量的名称;
  2. data_type:设置局部变量的数据类型大小;局部变量能为除 text、ntext、image 类型以外的任何数据类型;
  3. 所有局部变量在声明后均初始化为 Null,可施一公 SELECT 或 SET 设定响应的值;

2.2 局部变量赋值

使用 SET 语句为变量赋值,并使用 SELECT 语句选择列表中当前所引用的值来为变量赋值;
语法格式如下:

SET @local_variable = expression
SELECT {@local_variable = expression} [,...n]
  1. SELECT 语句通常用于将单个值返回到变量中,若有多个值,并将返回的最后一个值赋给变量;
  2. 若无返回行,则变量将保留当前值;
  3. expression 不返回值,则变量设为 NULL;
  4. 一个 SELECT 语句能初始化多个局部变量;

2.3. 变量显示

使用 PRINT 语句显示变量值,语法格式如下:

PRINT @local_variable

SELECT 语句也能用于局部变量的查看,格式如下:

SELECT @local_variable

3. 全局变量

全局变量由系统提供且预先声明,是 SQL Server 系统内部使用的变量,其作用范围并不仅限于某一程序,而是任何程序均能随时调用,通常存储 SQL Server 的配置设定值和统计数据;
全局变量是由系统定义和维护的变量,是用于记录服务活动状态的一组数据;全局变量名由 @@ 符号开始;用户不能建立全局变量,也不能使用 SET 语句去修改全局变量的值;
用户能在程序中用全局变量来测试系统的设定值或 T-SQL 命令之后的状态值;
全局变量的查看语句同局部变量:SELECT@@variable;

3.1 全局变量注意事项

使用全局变量时应注意:

  1. 全局变量不是由用户的程序定义的,而是在服务器级定义的;
  2. 用户只能使用预先定义的全局变量;
  3. 引用全局变量时,必须以标记符 “@@" 开头;
    4.局部变量的名称不能与全局变量的名称相同,否则会在应用程序中出现不可预测的结果;

3.2 常用的全局变量

SQL Server 支持的全局变量主要包括以下6个:

  1. @@CONNECTIONS:返回自最近一次启动 SQL Server 以来连接或视图连接的次数;
  2. @@ERROR:返回最后执行 SQL 语句的错误代码;
  3. @@ROWCOUNT:返回上一次语句影响的数据行的行数;
  4. @@SERVERNAME:返回运行 SQL Server 的本地服务器的名称;
  5. @@VERSION:返回 SQL Server 当前安装的日期、版本和处理器类型;
  6. @@LANGUAGE:返回当前 SQL Server 服务器的语言;

4. 注释符

注释是程序代码中不执行的文本字符串,用于对代码进行说明或暂时禁用正在进行判断的部分语句;
在 Microsoft SQL Server 系统中支持两种注释方式,即双连字符--)注释方式和正斜星号正斜杠星号字符对(/*···*/)注释方式;

  1. 双连字符--)注释方式主要用于在一行中对代码进行解释和描述;
  2. 正斜杠星号字符对/*···*/)注释方式中,既能用于多行注释,又能与执行的代码处在同一行,甚至还能在可执行代码的内部;
  3. 双连字符--)注释和正斜杠星号字符对(/*···*/)注释都没有注释长度的限制;一般地,行内注释采用双连字符,多行注释采用正斜杠星号字符对;

5. 运算符

运算符是一种符号,用来指定要在一个或多个表达式中执行的操作;
SQL Server 使用的运算符有:算术运算符、赋值运算符、按位运算符、比较运算符、逻辑运算符、字符串串联运算符、一元运算符

5.1 算术运算符

算术运算符在两个表达式上执行数学运算,这两个表达式可以是数字类型分类的任何数据类型;
算术运算符如下表:
20220330
注意: 加(+)和减(-)运算符也能用于对 datetime 及 smalldatetime 值执行算数运算符;

5.2 赋值运算符

T-SQL 语言有一个赋值运算符,即等号(=);
在下面的示例中创建了 @Teacher 变量,赋值运算符将 @Teacher 设置成一个由表达式返回的值;

DECLARE @Teacher INT
SET @Techer = 2

用户也能使用赋值运算符在列标题和为列定义的表达式之间建立关系;

5.3 按位运算符

按位运算符在两个表达式之间执行位操作,这两个表达式能为整形数据类型中的任何数据类型;
按位运算符如下表:

20220330
位运算符的操作数可以是整形或二进制字符串数据类型分类中的任何数据类型(但 image 数据类型除外);
此外,两个操作数不能同时是二进制字符串类型分类中的某种数据类型;
下表显示所支持的操作数数据类型;
20220330

5.4 比较运算符

比较运算符是 SQL 中常见的一类运算符,WHERE 子句后的大部分条件语句是由表达式和比较运算符组成的;
语法格式如下:

<表达式>比较运算符<表达式>

SQL 中常见的比较运算符如下表:
20220330

  1. 比较运算符的结果有布尔数据型,它有3种植:TRUE、FALSE、UNKNOWN;那些返回布尔数据类型的表达式被称为布尔表达式
  2. 与其他 SQL Server 数据类型不同,不能将布尔数据型指定为表列或变量的数据类型,也不能在结果中返回布尔数据类型;
  3. SET ANSI_NULLS 为 ON 时,带一个或两个 NULL 表达式的运算符返回 UNKNOWN;当 SET ANSI_NULLS 为 OFF,那么 NULL = NULL 就返回 TRUE;

WHERE 子句中使用带有布尔数据类型的表达式能筛选出符合搜索条件的行,也能在流程控制语句中使用这种表达式;

5.5 字符串串联运算符

字符串串联运算符允许通过(+)进行字符串串联,这个加号也被称为字符串串联运算符;其他所有的字符串操作都能通过字符串函数进行处理;
默认情况下,对于 varchar 数据类型的数据,在 INSERT 或赋值语句中,将空的字符串解释为空字符串;
在串联 varchar、char 或 text 数据类型的数据中,空的字符串被解释为空字符串;
例如: ’abc‘+‘’+’def‘ 存储为 ’abcdef‘;

5.6 一元运算符

一元运算符只对一个表达式执行操作,这个表达式可以是数字数据类型分类中的任何一种数据类型;
+(正)、和 -(负)运算符能用于数字数据类型分类的任何数据类型的表达式;
~ (按位 NOT)运算符只能用于整形数据类型分类的任何数据类型的表达式;
一元运算符如下表:20220330

5.7 运算符优先级

当一个复杂表达式有多个运算符时,运算符优先级决定执行运算的先后顺序;
执行顺序为从上而下、从左到右;
运算符优先级如下表:
20220330

6. 通配符

在 SQL 中,字符串数据类型之间的比较通常使用 LIKE 关键字,而 LIKE 通常与通配符搭配使用,能提高其使用效率;
通配符是指字符串数据类型中可用于代替其他任意字符的字符,在 SQL 中,常用的通配符有:“_”、“%”、“[ ]”、“[^]” 四种,
其作用和说明如下表: 20220330

在 SQL 中,使用最频繁的通配符是 "%" 和 “_";前者,可代替后者的使用,但在确定徐匹配的字符为一个的情况下,应选择 "_",因为通配符 "_" 的执行效率要高于通配符 "%"

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL Server 数据库之变量 的相关文章

随机推荐

  • c++使用高斯顺序消元法,求解方程组

    方程组形式为 AX b 高斯顺序消元法的目的是将方程组整理为一个上三角矩阵 在获得这个上三角矩阵后 就可以通过回代的方法 逆序的求出方程的根X n 1 X 0 可以将求解方程组分为如下几个步骤 1 首先消去第一列除第一行外的所有元素 将第2
  • 微信小程序获取当前日期及时间

    1 在微信小程序新建好之后 项目内可以看到有一个名字为utils的文件夹 内放置util js文件 util js文件用于存放公共方法 打开后可以看到内容如下图 如果说你只需要获得当前日期等其他文件内没有的数据 就需要你进行添加 可以看到源
  • 100行代码实现加权负载均衡算法(WRR)

    轮询算法round robin是很基础的负载均衡算法 实际应用中wrr更为常见 但一般不需要自己实现 因为一般需要rr的场景 都已经在基础设施层面进行了支持 比如lvs或nginx通过配置即可实现 但业务上偶尔也需要自己实现负载均衡 所以有
  • spring缓存机制-根据condition加入缓存(三)

    spring是一个轻量级开源框架 以IoC Inverse of Control 控制反转 和AOP Aspect Oriented Programming 面向切面编程 为内核 兼具功能强大的的原生展现层spring mvc 原生持久层s
  • mac运行cocos2dx加载新资源的步骤

    如果不懂如何在mac下运行cocos2dx程序 可以参考以下的文章 http blog csdn net leansmall article details 50310343 文章中所说的 XCODE下拉列表 为 接下来 如果有新的图片或者
  • 舍友仅仅打了一把游戏,我就学会了如何实现用中断控制数码管各位的显示

    一 电路图 点击下载 二 代码 include
  • OpenMP和MPI比较

    OpenMP和MPI是并行编程的两个手段 对比如下 OpenMP 线程级 并行粒度 共享存储 隐式 数据分配方式 可扩展性差 MPI 进程级 分布式存储 显式 可扩展性好 OpenMP采用共享存储 意味着它只适应于SMP DSM机器 不适合
  • Postman如何导出接口的几种方法

    本文主要介绍了Postman如何导出接口的几种方法 文中通过示例代码介绍的非常详细 具有一定的参考价值 感兴趣的小伙伴们可以参考一下 前言 我的文章还是一贯的作风 简确用风格 简单确实有用 你们可叫我职场新人救星 好的废话不多说 今天这篇文
  • Flask框架五:高级视图

    1 类视图 1 1映射转换方式 除了 route 给函数添加装饰器映射路由外 还可以通过app add url rule view func func 来映射 类视图就要用add url rule来注册映射 from flask impor
  • 宋浩《概率论与数理统计》自用笔记

    文章目录 第一章 概率论的基本概念 古典概型 几何概型 公理化 条件概率 独立性 第二章 随机变量及其分布 离散型随机变量及其概率分布 连续型随机变量及其概率密度函数 分布函数 离散型的分布函数 连续型的分布函数 离散型分布 0 1分布 几
  • oracle误执行update提交事务后,回滚数据

    今天在公司服务器上执行了一句update SQL 并且提交了事务 忘记加筛选条件 导致整表字段被改 一下就来记录下回滚过程 1 找到自己执行update语句的时间 select r FIRST LOAD TIME r from v sqla
  • windows使用虚拟机安装mac系统

    windows使用虚拟机安装mac系统 iso链接 macOS Monterey 12 3 1 iso RTF https www aliyundrive com s s9gYRJcbtRv 点击链接保存 或者复制本段内容 打开 阿里云盘
  • 什么是集群、分布式、集中式、伪分布式

    1 集中式 将项目等部署到同一台机器上 对机器性能要求比较高 一般会用多台机器备份 否则 如果机器出现死机等状况 整个项目将不能运行 eg 就好比你要盖一座房子 你房子就给一个人盖 如果这个人生病或者有事 你还没有合适的人来代替这个人 你的
  • 什么是TCP/IP协议?

    点击上方 程序员小灰 选择 置顶公众号 有趣有内涵的文章第一时间送达 本文转载自公众号 技术特工队 作者整理了一些TCP IP协议簇中需要必知必会的十大问题 既是面试高频问题 又是程序员必备基础素养 一 TCP IP模型 TCP IP协议模
  • vue2+bootstrapvue+Koa2+nodejs实现分页

    1 实现分页思路 1 后端需要接收两个数据 当前页 currentPage 每一页的大小 即每一页要展示多少条数据 pageSize 2 注意 前端每点击一次页码儿都要发送一次请求 2 实现案例 vue2 bootstrapvue前端 Ko
  • 内网安全:WMI协议与SMB协议横向移动

    目录 网络拓扑图 网络环境说明 WMI协议 SMB协议 域内信息收集 WMI协议 横向移动 利用方式一 wmic命令 利用方式一 cscript 利用方式一 impacket SMB协议 横向移动 利用方式一 psexec 利用方式二 ps
  • 1年多经验的 Java 开发,该如何提升自己比较好?

    中级Java开发岗位职责 负责研发公司应用软件的模块设计 开发和交付 负责编码 单元测试 按照功能组件的详细设计 对其他软件工程师的代码进行审核 参与新知识的学习和培训 参与业务相关的需求评审 编写技术文档设计 中级Java开发的岗位要求
  • Vue中的绑定样式

    绑定样式 1 class样式 写法 class xxx xxx可以是字符串 对象 数组 字符串写法适用于 类名不确定 要动态获取 对象写法适用于 要绑定多个样式 个数不确定 名字也不确定 数组写法适用于 要绑定多个样式 个数确定 名字也确定
  • 测试网络连通性

    测试网络连通性的方式 ssh v p 端口 root IP curl ip 端口 nc v IP 端口
  • SQL Server 数据库之变量

    变量 1 变量概述 1 1 常规标识符 1 2 分隔标识符 2 局部变量 2 1 局部变量声明 2 2 局部变量赋值 2 3 变量显示 3 全局变量 3 1 全局变量注意事项 3 2 常用的全局变量 4 注释符 5 运算符 5 1 算术运算