首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

Transact-SQL 變數宣告完整指南:語法、作用域與最佳實踐

     編輯:DB2 教學

Transact-SQL (T-SQL) 中的區域變數是儲存暫時資料、控制流程邏輯的核心工具。本文系統說明 DECLARE 語法、資料類型選擇、初始化規則、作用域邊界與常見錯誤,助您編寫健壯的預存程序與批次腳本。

一、DECLARE 基本語法三要素

  1. 命名規則:首字元必須為 @(如 @MyCounter)。
  2. 資料類型與長度:支援系統內建類型(INT, NVARCHAR(n), DECIMAL(p,s) 等)與使用者定義類型。數值類型需指定精度與小數位。
  3. 預設初始值:宣告即設為 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 合併為單一批次。

四、最佳實踐建議

  • 優先使用系統內建類型:減少未來升級相容性風險,避免依賴使用者定義類型。
  • 就近宣告:在首次使用前緊鄰宣告,縮小作用域,提升可讀性。
  • 明確初始化:雖預設為 NULL,但業務邏輯常需非 NULL 起始值,建議 DECLARE @v INT = 0; 明確語意。
  • 命名語意化:採用 @Entity_Attribute 風格(如 @Order_TotalAmount),避免單字母變數。

五、進階:表值變數與資料表類型參數

SQL Server 2008+ 支援 DECLARE @t TABLE (id INT, name NVARCHAR(50)) 表值變數,以及資料表值參數(TVP)跨預存程序傳遞集合資料,效能優於臨時表,適合中小資料集場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved