SQL研习录(31)——变量详解
版权声明
- 本文原创作者:清风不渡
- 博客地址:https://blog.csdn.net/WXKKang
一、变量
1、变量的种类
变量是由用户定义并可赋值的数据内存空间,变量有局部变量和全局变量两种,局部变量是用来存储指定数据类型的单个数据值的对象,全局变量是由系统提供且预先声明的用来保存数据库(如SQL Server)系统运行状态数据值的变量
下面就以SQL Server数据库为例,学习一下变量
2、全局变量(系统变量)
全局变量必须以标记“@@”作为前缀,如@@version
全局变量由系统定义和维护,我们只能读取,不能修改全局变量的值
全局变量是由数据库(SQL Server)系统提供并且赋值的变量,名字由“@@”符号开始,并且用户不能建立全局变量,也不能使用set语句去修改全局变量的值。大部分全局变量的值是报告本次数据库系统启动后发生的系统活动状态。通常应该将全局变量的值赋值给同一个批中的局部变量,以便保存和处理
下面是一些SQL Server数据库中常用的系统变量
示例: 下面我们来使用几个系统变量感受一下,代码如下:
-- 返回当前本服务器的连接的数目
print '当前本服务器连接的数目为:'
print @@connections
print ''
-- 返回当前SQL Server服务器的版本和处理器类型
print '当前SQL Server服务器的版本和处理器类型为:'
print @@version
print ''
-- 返回上一条SQL语句影响的数据的行数
print '上一条SQL语句影响的数据的行数为:'
SELECT * FROM student;
print @@rowcount
print ''
-- 返回当前SQL Server服务器的语言
print '当前SQL Server服务器的语言为:'
print @@language
执行结果如下:
3、局部变量
局部变量必须以标记@作为前缀,如@age int
局部变量:先声明,再赋值
(1)声明语法
DECLARE @变量名 数据类型 [=默认值]
注: 如果不加默认值则默认值为NULL
(2)赋值语法
SET @变量名 =值
或 SELECT @变量名 =值
区别: 如果是普通的赋值,它们没有区别,如果是将查询语句的结果进行赋值(如下),则有区别:
SET @变量名 =(SELECT …)
或 SELECT @变量名 =(SELECT …)
当通过set为变量赋值时,如果查询语句返回的不止一个值,那么报错
当通过select为变量赋值的时候,如果查询语句返回的不止一个值,那么会将最后一个值赋值给该变量
相对来说,set更加严谨一些,而select更灵活一些