SQL 变量:SQL Server 声明、设置和选择变量
SQL Server中的变量是什么?
在MS SQL中,变量是一种充当内存位置占位符的对象。变量存储单个数据值。
SQL中的变量类型:局部变量、全局变量
MS SQL有两种类型的变量
- 局部变量
- 全局变量。
但是,用户只能创建局部变量。
下图解释了MS SQL服务器中可用的两种变量类型。MS SQL服务器。
局部变量
- 用户声明局部变量。
- 默认情况下,局部变量以@开头。
- 每个局部变量的作用域都限制在会话中的当前批处理或过程中。
全局变量
- 系统维护全局变量。用户无法声明它们。
- 全局变量以@@开头
- 它存储与会话相关的信息。
如何在SQL中声明变量
- 在批处理或过程中使用任何变量之前,需要声明变量。
- DECLARE命令用于声明充当内存位置占位符的变量。
- 一旦声明完成,变量就可以在批处理或过程的后续部分中使用。
TSQL语法
DECLARE { @LOCAL_VARIABLE[AS] data_type [ = value ] }
标尺
- 初始化是声明时的可选操作。
- 默认情况下,DECLARE将变量初始化为NULL。
- 使用“AS”关键字是可选的。
- 要声明多个局部变量,请在第一个局部变量定义后使用逗号,然后定义下一个局部变量名和数据类型。
声明变量的示例
查询:带“AS”
DECLARE @COURSE_ID AS INT;
查询:不带“AS”
DECLARE @COURSE_NAME VARCHAR (10);
查询:声明两个变量
DECLARE @COURSE_ID AS INT, @COURSE_NAME VARCHAR (10);
为SQL变量赋值
您可以通过以下三种方式为变量赋值:
- 在声明变量期间使用DECLARE关键字。
- 使用SET
- 使用SELECT
让我们详细了解所有三种方式
在声明变量期间使用DECLARE关键字
T-SQL语法
DECLARE { @Local_Variable [AS] Datatype [ = value ] }
在这里,在数据类型之后,我们可以使用“=”后跟要赋给它的值。
查询
DECLARE @COURSE_ID AS INT = 5 PRINT @COURSE_ID
使用SQL SET变量
有时我们希望将声明和初始化分开。SET可用于在声明变量后为变量赋值。以下是使用SET为变量赋值的不同方法。
示例:使用SET为变量赋值
语法
DECLARE @Local_Variable <Data_Type> SET @Local_Variable = <Value>
查询
DECLARE @COURSE_ID AS INT SET @COURSE_ID = 5 PRINT @COURSE_ID
示例:使用SET为多个变量赋值。
语法
DECLARE @Local_Variable _1 <Data_Type>, @Local_Variable_2 <Data_Type>, SET @Local_Variable_1 = <Value_1> SET @Local_Variable_2 = <Value_2>
规则:一个SET关键字只能用于为一个变量赋值。
查询
DECLARE @COURSE_ID as INT, @COURSE_NAME AS VARCHAR(5) SET @COURSE_ID = 5 SET @COURSE_NAME = 'UNIX' PRINT @COURSE_ID PRINT @COURSE_NAME
示例:使用SET为带标量子查询的变量赋值
语法
DECLARE @Local_Variable_1 <Data_Type>, @Local_Variable_2 <Data_Type>,SET @Local_Variable_1 = (SELECT <Column_1> from <Table_Name> where <Condition_1>)
标尺
- 将查询括在括号中。
- 查询应为标量查询。标量查询是指结果仅包含一行和一列的查询。否则,查询将引发错误。
- 如果查询返回零行,则变量设置为EMPTY,即NULL。
假设:假设我们有一个名为“Guru99”的表,其中包含两列,如下所示。
我们将在后续教程中使用“Guru99”表。
示例1:当子查询返回一行作为结果时。
DECLARE @COURSE_NAME VARCHAR (10) SET @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 3) PRINT @COURSE_NAME
示例2:当子查询返回零行作为结果时
DECLARE @COURSE_NAME VARCHAR (10) SET @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 5) PRINT @COURSE_NAME
在这种特定情况下,变量值为空,即NULL。
使用SQL SELECT变量
与SET类似,我们也可以使用SELECT在声明变量后使用DECLARE为变量赋值。以下是使用SELECT为变量赋值的不同方法。
示例:使用SELECT为变量赋值
语法
DECLARE @LOCAL_VARIABLE <Data_Type> SELECT @LOCAL_VARIABLE = <Value>
查询
DECLARE @COURSE_ID INT SELECT @COURSE_ID = 5 PRINT @COURSE_ID
示例:使用SELECT为多个变量赋值
语法
DECLARE @Local_Variable _1 <Data_Type>, @Local_Variable _2 <Data_Type>,SELECT @Local_Variable _1 = <Value_1>, @Local_Variable _2 = <Value_2>
规则:与SET不同,SELECT可用于为多个变量赋值,变量之间用逗号分隔。
DECLARE @COURSE_ID as INT, @COURSE_NAME AS VARCHAR(5) SELECT @COURSE_ID = 5, @COURSE_NAME = 'UNIX' PRINT @COURSE_ID PRINT @COURSE_NAME
示例:使用子查询为变量赋值SELECT
语法
DECLARE @Local_Variable_1 <Data_Type>, @Local_Variable _2 <Data_Type>,SELECT @Local_Variable _1 = (SELECT <Column_1> from <Table_name> where <Condition_1>)
标尺
- 将查询括在括号中。
- 查询应为标量查询。标量查询是指结果为一行一列的查询。否则,查询将引发错误。
- 如果查询返回零行,则变量为空,即NULL。
- 重新考虑我们的“Guru99”表
示例1:当子查询返回一行作为结果时。
DECLARE @COURSE_NAME VARCHAR (10) SELECT @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 1) PRINT @COURSE_NAME
示例2:当子查询返回零行作为结果时
DECLARE @COURSE_NAME VARCHAR (10) SELECT @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 5) PRINT @COURSE_NAME
在这种特定情况下,变量为空,即NULL。
示例3:使用常规SELECT语句为变量赋值。
语法
DECLARE @Local_Variable _1 <Data_Type>, @Local_Variable _2 <Data_Type>,SELECT @Local_Variable _1 = <Column_1> from <Table_name> where <Condition_1>
标尺
- 与SET不同,如果查询返回多行,则变量值将设置为最后一行值。
- 如果查询返回零行,则变量设置为EMPTY,即NULL。
查询1:查询返回一行。
DECLARE @COURSE_NAME VARCHAR (10) SELECT @COURSE_NAME = Tutorial_name from Guru99 where Tutorial_ID = 3 PRINT @COURSE_NAME
查询2:查询返回多行。
DECLARE @COURSE_NAME VARCHAR (10) SELECT @COURSE_NAME = Tutorial_name from Guru99 PRINT @COURSE_NAME
在这种特殊情况下,变量值设置为最后一行值。
查询3:查询返回零行。
DECLARE @COURSE_NAME VARCHAR (10) SELECT @COURSE_NAME = Tutorial_name from Guru99 where Tutorial_ID = 5 PRINT @COURSE_NAME
在这种特定情况下,变量为空,即NULL。
其他SQL变量示例
在查询中使用变量
查询
DECLARE @COURSE_ID Int = 1 SELECT * from Guru99 where Tutorial_id = @COURSE_ID
关于SQL Server变量的有趣事实!
- 局部变量可以使用PRINT和SELECT命令显示。
- 表数据类型不允许在声明时使用“AS”。
- SET符合ANSI标准,而SELECT不符合。
- 允许使用@作为名称创建局部变量。例如,我们可以这样声明:
'DECLARE @@ as VARCHAR (10)'
摘要
- 变量是充当占位符的对象。
- 存在两种变量:局部变量和全局变量。
- 我们可以通过以下三种方式之一为变量赋值:在使用1) DECLARE 2) 使用SET 3) 使用SELECT时。