一、局部變量的定義與賦值
定義語法:
-- 聲明一個局部變量 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 -- 保持原值
三、全局變量
全局變量都使用倆個@標志作為前綴。
全部變量的使用: