1、概述
SQLServer变量对应内存中的一个存储空间。它和常量不同,变量的值可以在执行过程中改变。
2、分类
SQLServer变量根据作用范围不同主要分为局部变量和全局变量。
2.1.局部变量
局部变量是用户在程序中定义的变量,它仅在定义的程序范围内有效。局部变量可以用来保存从表中读取的数据,也可以作为临时变量保存计算的中间结果。
注意:局部变量名称的第一个字符必须为一个@。
示例:
- -- 定义两个局部变量
- DECLARE @m int,@n int;
- -- 赋值
- SET @m=9;
- SET @n=1;
- -- 查询
- SELECT @m+@n;
2.2 全局变量
全局变量通常以@@开头。这些变量一般都是SQL Server中的系统函数,它们的语法遵循函数的规则。用户可以在程序中使用这些函数测试系统特性和SQL命令的执行情况。常用的全局变量如下:
- @@ERROR -- 最后一个SQL错误的错误号
- @@IDENTITY -- 最后一次插入的标识值
- @@LANGUAGE -- 当前使用的语言的名称
- @@MAX_CONNECTIONS -- 可以创建的同时连接的最大数目
- @@ROWCOUNT -- 受上一个SQL语句影响的行数
- @@SERVERNAME -- 本地服务器的信息
- @@TRANSCOUNT -- 当前连接打开的事物数
- @@VERSION -- 查看SQL Server的版本信息
3.声明变量
3.1、简单声明
变量只有在声明后才能使用,可以使用DECLARE语句来声明变量。在声明变量时可以指定变量的数据类型和长度。
- DECLARE @name nvarchar(30);
3.2 声明多个变量
声明多个局部变量,需要在定义的局部变量后使跟上一个逗号,然后指定下一个局部变量名称和数据类型。
- DECLARE @Name nvarchar(30), @Age int;
3.3 变量作用域
在使用变量时,需要注意变量的作用域。变量具有局部作用域,只在定义它们的批处理或过程中可见。作用域范围从声明变量的地方开始到声明变量的批处理或存储过程的结尾。
- USE DB;
- GO
- DECLARE @Age int;
- SET @Age = 30;
- GO -- 结束符
- select @Age -- 报错
4.变量赋值
在声明变量后,变量值被默认设置为NULL。可以使用SET或SELECT语句。SET是为变量赋值的首选方法。
变量也可以通过选择列表中当前所引用的值赋值。如果在选择列表中引用变量,则它应当被赋以标量值或者SELECT语句应仅返回一行。
示例:
- DECLARE @Age int;
- -- SELECT语句赋值
- SELECT @Age = age from t_user ORDER BY age desc;-- 返回最后一行的值
- select @Age;