首页 > 技术文章 > SQLServer —— 变量的使用

xulinjun 2019-12-11 07:46 原文

一、局部变量的定义与赋值

定义语法:

-- 声明一个局部变量
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    -- 保持原值

 

三、全局变量

全局变量都使用俩个@标志作为前缀。

 

 全部变量的使用:

 

 

 

 

 

 

推荐阅读