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

SQL Server中的变量是什么?

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

SQL中的变量类型:局部变量、全局变量

MS SQL有两种类型的变量

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

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

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

SQL Variables
SQL Server变量类型

局部变量

  • 用户声明局部变量。
  • 默认情况下,局部变量以@开头。
  • 每个局部变量的作用域都限制在会话中的当前批处理或过程中

全局变量

  • 系统维护全局变量。用户无法声明它们。
  • 全局变量以@@开头
  • 它存储与会话相关的信息

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

您可以通过以下三种方式为变量赋值

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

让我们详细了解所有三种方式

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

T-SQL语法

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

在这里,在数据类型之后,我们可以使用“=”后跟要赋给它的值。

查询

DECLARE @COURSE_ID AS INT = 5
PRINT @COURSE_ID

Assigning a value to SQL Variable

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

SQL SET VARIABLE

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

示例:使用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 SET VARIABLE

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

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

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

SQL SET VARIABLE

示例2:当子查询返回零行作为结果时

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

在这种特定情况下,变量值为空,即NULL。

SQL SET VARIABLE

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

SQL SELECT VARIABLE

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

示例:使用子查询为变量赋值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 SELECT VARIABLE

示例2:当子查询返回零行作为结果时

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

在这种特定情况下,变量为空,即NULL。

SQL SELECT VARIABLE

示例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 SELECT VARIABLE

查询2:查询返回多行。

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

在这种特殊情况下,变量值设置为最后一行值

SQL SELECT VARIABLE

查询3:查询返回零行。

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

在这种特定情况下,变量为空,即NULL。

SQL SELECT VARIABLE

其他SQL变量示例

在查询中使用变量

查询

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

Other SQL Variable

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

  • 局部变量可以使用PRINT和SELECT命令显示。
  • 表数据类型不允许在声明时使用“AS”。
  • SET符合ANSI标准,而SELECT不符合。
  • 允许使用@作为名称创建局部变量。例如,我们可以这样声明:
    'DECLARE @@ as VARCHAR (10)'
    

摘要

  • 变量是充当占位符的对象。
  • 存在两种变量:局部变量和全局变量。
  • 我们可以通过以下三种方式之一为变量赋值:在使用1) DECLARE 2) 使用SET 3) 使用SELECT时。