SQL 变量:SQL Server 声明、设置和选择变量
SQL Server 中的变量是什么?
在 MS SQL 中,变量是充当内存位置占位符的对象。变量保存单个数据值。
SQL 中的变量类型:本地、全局
MS SQL 有两种类型的变量:
- 局部变量
- 全局变量。
但是用户只能创建局部变量。
下图解释了两种可用的变量类型 MS SQL服务器.
局部变量
- 用户声明局部变量。
- 默认情况下,局部变量以 @.
- 每个局部变量的作用域都有限制 当前批次或程序 在任何给定的会话中。
全局变量
- 全局变量由系统维护,用户无法声明。
- 全局变量以 @@
- 它存储 会话相关信息.
如何在 SQL 中声明变量
- 在批处理或过程中使用任何变量之前,您需要 声明变量。
- DECLARE 命令用于 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 两个变量
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 VARIABLE
有时我们希望将声明和初始化分开。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
在这种特殊情况下,变量值为EMPTY,即NULL。
使用 SQL SELECT VARIABLE
就像 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
在这个特殊情况下,变量为EMPTY,即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
在这种特殊情况下,变量为EMPTY,即NULL。
其他 SQL 变量示例
在查询中使用变量
查询:
DECLARE @COURSE_ID Int = 1 SELECT * from Guru99 where Tutorial_id = @COURSE_ID
有关 SQL Server 变量的有趣事实!
- 可以使用 PRINT 以及 SELECT COMMAND 显示局部变量
- 表数据类型不允许在声明期间使用“AS”。
- SET 符合 ANSI 标准,而 SELECT 不符合。
- 还可以创建名为 @ 的局部变量。例如,我们可以将其声明为:
'DECLARE @@ as VARCHAR (10)'
总结
- 变量是充当占位符的对象。
- 变量有两种类型:局部变量和全局变量
- 我们可以通过以下三种方式分配变量:使用时 1)DECLARE 2)使用 SET 3)使用 SELECT