每種程式語言都會提供宣告變數的指令,T-SQL 自然也不例外。
在 T-SQL 中,需要使用到變數,不外乎下面幾種情況:
●將參數傳給預存程序或是函式(請參考:「使用流程控制:BEGIN...END 與 RETURN」)
●控制迴圈的執行(請參考:「使用流程控制:WHILE、BREAK 與 CONTINUE」)
●在 IF 陳述式中,作為條件判斷的依據(請參考:「使用流程控制:GOTO」)
●在 WHERE 陳述式中,作為篩選條件的依據
相信大家都知道,變數有分區域變數(Local Variable)與全域變數(Global Variable),然而在 Microsoft SQL Server 裡,所有的變數都是區域變數,也就是說,所宣告的變數只能夠在同一個批次、預存程序或該變數所定義的區塊裡面,被用到。
要宣告變數,只要使用 DECLARE 陳述式就可以了,要注意的是,變數名稱的開頭必須有 @ 符號。例如下面這段程式碼,就是宣告一個名稱為 count 的整數資料型別之變數:
DECLARE @count int
一個 DECLARE 陳述式可以同時宣告多個變數,變數跟變數之間,用逗號來分隔:
DECLARE @count int, @x int, @y nvarchar(10)
當變數被宣告之後,該變數的初始值會是 NULL,所以要利用 SET 或 SELECT 陳述式來指派適當的值給該變數:
DECLARE @count int, @x int, @y nvarchar(10)
-- 檢查變數的初始值
SELECT [@count] = @count, [@x] = @x, [@y] = @y
-- 使用 SET 指派值
SET @count = 1
-- 使用 SELECT 指派值
SELECT @x = 0, @y = 'alexc'
-- 檢查變數的設定值
SELECT [@count] = @count, [@x] = @x, [@y] = @y
執行的結果畫面:
在一開始時,我們就提到了使用到變數的時機,前面 3 個都已經討論過了,就只有最後 1 個還沒有提到。接著就來討論這個情況,假設要從 AdventureWorks 資料庫的 HumanResources.Employee 資料表中,找出員工編號小於等於 10 的員工,可以使用下面的程式碼:
USE AdventureWorks
GO
DECLARE @EmpID int
SET @EmpID = 10
SELECT 員工編號 = EmployeeID,
性別 = CASE Gender
WHEN 'M' THEN N'男'
WHEN 'F' THEN N'女'
END,
婚姻 = CASE MaritalStatus
WHEN 'S' THEN N'單身'
WHEN 'M' THEN N'已婚'
END
FROM HumanResources.Employee
WHERE EmployeeID <= @EmpID
執行的結果畫面: