SQLServer —— 变量的使用
一、局部变量的定义与赋值
定义语法:
-- 声明一个局部变量 DECLARE @变量名 数据类型 -- 声明多个局部变量 DECLARE @变量名1 数据类型1, @变量名2 数据类型2
赋值语法:
SET @变量名 = 值 或 SELECT @变量名 = 值
使用 Select 赋值确保筛选出的记录只有1条。
实际的使用例子:
比如我现在有一张学生表,内容如下。
我现在有个需求,查出马小李的前面一位同学和马小李后面的一位同学,这个需求就需要使用局部变量:
-- 定义2个变量,一个保存学号,一个保存姓名 declare @stuId int, @stuName varchar(20) -- 给姓名变量赋值 set @stuName = '马小李' -- 查出马小李的学号并保存在学号变量中 select @stuId = StudentId from Students where StudentName = @stuName -- 查出马小李前后的学生信息 select * from Students where StudentId = (@stuId - 1) or StudentId = (@stuId + 1)
查询结果如下:
二、SET 和 SELECT 比较
使用场景 | set | select |
同时对多个变量赋值 | 不支持 | 支持 |
表达式返回多个值时 | 出错 | 将返回的最后一个值赋给变量 |
表达式未返回值时 | 变量被赋NULL值 | 变量保持原值 |
比如,根据上面的学员表,如下的使用方式有差异:
declare @stuAddress varchar(500), @stuName varchar(20) -- set @stuAddress = '天津市南开区红磡公寓5-5-102', @stuName = '马小李' -- 不允许这样赋值 select @stuAddress = '天津市南开区红磡公寓5-5-102', @stuName = '马小李' -- 允许 -- set @stuAddress = (select StudentAddress from Students) -- 不允许 select @stuAddress = StudentAddress from Students -- 允许 set @stuAddress = (select StudentAddress from Students where 1 < 0) -- NULL值 select @stuAddress = StudentAddress from Students where 1 < 0 -- 保持原值
三、全局变量
全局变量都使用俩个@标志作为前缀。
全部变量的使用: