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(初始版本至当前版本)。 |
语法
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