Transact-SQL (T-SQL) 中的區域變數是儲存暫時資料、控制流程邏輯的核心工具。本文系統說明 DECLARE 語法、資料類型選擇、初始化規則、作用域邊界與常見錯誤,助您編寫健壯的預存程序與批次腳本。
@(如 @MyCounter)。INT, NVARCHAR(n), DECIMAL(p,s) 等)與使用者定義類型。數值類型需指定精度與小數位。NULL,除非同步賦值(SQL Server 2008+ 支援 DECLARE @v INT = 1)。DECLARE @MyCounter INT;
DECLARE @LastName NVARCHAR(30),
@FirstName NVARCHAR(20),
@State NCHAR(2);
作用域邊界:從 DECLARE 處開始,到批次(GO 分隔)或預存程序/觸發器結束為止。
DECLARE @MyVariable INT;
SET @MyVariable = 1;
GO -- 批次結束,變數銷毀
-- 錯誤:@MyVariable 已超出作用域
SELECT * FROM Employees WHERE EmployeeID = @MyVariable;
修正:將 DECLARE 移至第二個批次,或移除 GO 合併為單一批次。
DECLARE @v INT = 0; 明確語意。@Entity_Attribute 風格(如 @Order_TotalAmount),避免單字母變數。SQL Server 2008+ 支援 DECLARE @t TABLE (id INT, name NVARCHAR(50)) 表值變數,以及資料表值參數(TVP)跨預存程序傳遞集合資料,效能優於臨時表,適合中小資料集場景。