SELECT @local_variable (Transact-SQL)

指定使用 DECLARE **@**local_variable 创建的指定局部变量应设置为指定表达式。

要分配变量,建议使用 SET **@**local_variable,而不使用 SELECT **@**local_variable。有关详细信息,请参阅 SET @local\_variable

主题链接图标Transact-SQL 语法约定

语法

SELECT { @local_variable { = | += | -= | *= | /= | %= | &= | ^= | |= } expression } [ ,...n ] [ ; ]

参数

  • **@**local_variable
    要为其赋值的声明变量。

  • =
    将右边的值赋给左边的变量。

  • { = | += | -= | *= | /= | %= | &= | ^= | |= }
    复合赋值运算符:

    += 相加并赋值

    -= 相减并赋值

    *= 相乘并赋值

    /= 相除并赋值

    %= 取模并赋值

    &= “位与”并赋值

    ^= “位异或”并赋值

    |= “位或”并赋值

  • expression
    任何有效的表达式。此参数包含一个标量子查询。

注释

SELECT @local\_variable 通常用于将单个值返回到变量中。但是,如果 expression 是列的名称,则可返回多个值。如果 SELECT 语句返回多个值,则将返回的最后一个值赋给变量。

如果 SELECT 语句没有返回行,变量将保留当前值。如果 expression 是不返回值的标量子查询,则将变量设为 NULL。

一个 SELECT 语句可以初始化多个局部变量。

注意注意

包含变量赋值的 SELECT 语句不能也用于执行通常的结果集检索操作。

示例

A. 使用 SELECT @local\_variable 返回单个值

在以下示例中,为变量 @var1 赋值 Generic Name。由于 Store 表中不存在为 CustomerID 指定的值,因此对该表的查询不返回任何行。变量的值仍为 Generic Name。

USE AdventureWorks ;       
GO       
DECLARE @var1 nvarchar(30);       
SELECT @var1 = 'Generic Name';       
SELECT @var1 = Name       
FROM Sales.Store       
WHERE CustomerID = 1000 ;      
SELECT @var1 AS 'Company Name';

下面是结果集。

Company Name                  
------------------------------
Generic Name                  

B. 使用 SELECT @local\_variable 以便在无结果集时返回 Null

在以下示例中,使用了一个子查询为 @var1 赋值。由于为 CustomerID 请求的值不存在,因此子查询不返回值,并将变量设为 NULL。

USE AdventureWorks ; 
GO 
DECLARE @var1 nvarchar(30) 
SELECT @var1 = 'Generic Name' 
SELECT @var1 = (SELECT Name 
FROM Sales.Store 
WHERE CustomerID = 1000) 
SELECT @var1 AS 'Company Name' ;

下面是结果集。

Company Name
----------------------------
NULL