SELECT @local_variable (Transact-SQL)

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

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

适用范围:SQL Server(SQL Server 2008 至当前版本),Windows Azure SQL Database(初始版本至当前版本)。

主题链接图标 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 AdventureWorks2012 ;       
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 AdventureWorks2012 ; 
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

请参阅

参考

DECLARE @local\_variable (Transact-SQL)

表达式(Transact-SQL)

SELECT (Transact-SQL)