SQL 变量:SQL Server 声明、设置和选择变量

SQL Server 中的变量是什么?

在 MS SQL 中,变量是充当内存位置占位符的对象。变量保存单个数据值。

SQL 中的变量类型:本地、全局

MS SQL 有两种类型的变量:

  1. 局部变量
  2. 全局变量。

但是用户只能创建局部变量。

下图解释了两种可用的变量类型 MS SQL服务器.

SQL 变量
SQL Server 中的变量类型

局部变量

  • 用户声明局部变量。
  • 默认情况下,局部变量以 @.
  • 每个局部变量的作用域都有限制 当前批次或程序 在任何给定的会话中。

全局变量

  • 全局变量由系统维护,用户无法声明。
  • 全局变量以 @@
  • 它存储 会话相关信息.

如何在 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 变量赋值

您可以按照以下步骤为变量赋值方法:

  1. 在变量声明期间使用 DECLARE 关键字。
  2. 使用 SET
  3. 使用 SELECT

让我们详细了解这三种方式:

在变量声明期间使用 DECLARE 关键字

T-SQL 语法:

DECLARE { @Local_Variable [AS] Datatype [ = value ] }

在这里,在数据类型之后,我们可以使用“=”后跟要分配的值

查询:

DECLARE @COURSE_ID AS INT = 5
PRINT @COURSE_ID

为 SQL 变量赋值

使用 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

SQL 设置变量

例如::分配一个值给 多变量 使用 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

SQL 设置变量

例如::使用 标量子查询 使用 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”,其中包含两列,如下所示:

SQL 设置变量

我们将在后续教程中使用“Guru99”表

例如1: 当子查询返回一行作为结果时。

DECLARE @COURSE_NAME VARCHAR (10)
SET @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 3)
PRINT @COURSE_NAME

SQL 设置变量

示例 2:当子查询返回零行时

DECLARE @COURSE_NAME VARCHAR (10)
SET @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 5)
PRINT @COURSE_NAME

在这种特殊情况下,变量值为EMPTY,即NULL。

SQL 设置变量

使用 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

SQL 选择变量

例如::使用 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

SQL 选择变量

例如::使用 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

SQL 选择变量

例如2: 当子查询返回零行时

DECLARE @COURSE_NAME VARCHAR (10)
SELECT @COURSE_NAME = (select Tutorial_name from Guru99 where Tutorial_ID = 5)
PRINT @COURSE_NAME

在这个特殊情况下,变量为EMPTY,即NULL。

SQL 选择变量

例如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

SQL 选择变量

查询 2:查询返回多行。

DECLARE @COURSE_NAME VARCHAR (10)
SELECT @COURSE_NAME = Tutorial_name from Guru99
PRINT @COURSE_NAME

在这个特殊情况下,变量值是 设置为最后一行的值.

SQL 选择变量

查询 3:查询返回零行。

DECLARE @COURSE_NAME VARCHAR (10)
SELECT @COURSE_NAME = Tutorial_name from Guru99 where Tutorial_ID = 5
PRINT @COURSE_NAME

在这种特殊情况下,变量为EMPTY,即NULL。

SQL 选择变量

其他 SQL 变量示例

在查询中使用变量

查询:

DECLARE @COURSE_ID Int = 1
SELECT * from Guru99 where Tutorial_id = @COURSE_ID

其他 SQL 变量

有关 SQL Server 变量的有趣事实!

  • 可以使用 PRINT 以及 SELECT COMMAND 显示局部变量
  • 表数据类型不允许在声明期间使用“AS”。
  • SET 符合 ANSI 标准,而 SELECT 不符合。
  • 还可以创建名为 @ 的局部变量。例如,我们可以将其声明为:
    'DECLARE @@ as VARCHAR (10)'
    

总结

  • 变量是充当占位符的对象。
  • 变量有两种类型:局部变量和全局变量
  • 我们可以通过以下三种方式分配变量:使用时 1)DECLARE 2)使用 SET 3)使用 SELECT