SELECT @local_variable (Transact-SQL)
指定利用 DECLARE @local_variable 來建立的指定本機變數應該設成指定的運算式。
對於指派變數,我們建議您利用 SET @local_variable 來取代 SELECT @local_variable。如需詳細資訊,請參閱<SET @local_variable>。
語法
SELECT { @local_variable { = | += | -= | *= | /= | %= | &= | ^= | |= } expression } [ ,...n ] [ ; ]
引數
@local_variable
這是將指派值的宣告變數。=
將右邊的值指派給左邊的變數。{= | += | -= | *= | /= | %= | &= | ^= | |= }
複合指派運算子:+= 加入並指派
-= 減去並指派
*= 乘以並指派
/= 除以並指派
%= 模除並指派
&= 位元 AND 並指派
^= 位元 XOR 並指派
|= 位元 OR 並指派
expression
這是任何有效的運算式。其中包括純量子查詢。
備註
SELECT @local_variable 通常用來將單一值傳回給變數。不過,當 expression 是資料行名稱時,它可以傳回多個值。如果 SELECT 陳述式傳回多個值,就會將最後傳回的值指派給變數。
如果 SELECT 陳述式未傳回任何資料列,變數會保留它目前的值。如果 expression 是未傳回任何值的純量子查詢,變數會設為 NULL。
一個 SELECT 陳述式可以初始化多個本機變數。
[!附註]
您不能也利用包含變數指派的 SELECT 陳述式來執行一般結果集擷取作業。
範例
A. 利用 SELECT @local_variable 來傳回單一值
在下列範例中,@var1 變數指派了 Generic Name 來作為值。針對 Store 資料表的查詢不會傳回任何資料列,因為資料表中並沒有指定給 CustomerID 的值。變數會保留 Generic Name 值。
USE AdventureWorks2008R2 ;
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 AdventureWorks2008R2 ;
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