變數 (SQL Variables)

SQL 變數用來儲存臨時資料,可在 SQL 語句或預存程序中使用。不同資料庫系統的變數語法有所差異。

MySQL 變數

使用者定義變數

MySQL 的使用者定義變數以 @ 開頭:

-- 設定變數
SET @myvar = 100;

-- 或使用 SELECT
SELECT @myvar := 100;

-- 使用變數
SELECT * FROM products WHERE price < @myvar;

在查詢中設定變數

SELECT @total := SUM(amount) FROM orders;
SELECT @total;  -- 顯示結果

SQL Server 變數

SQL Server 的區域變數以 @ 開頭,需先用 DECLARE 宣告:

-- 宣告變數
DECLARE @myvar INT;

-- 設定變數值
SET @myvar = 100;

-- 或使用 SELECT 設定
SELECT @myvar = 100;

-- 使用變數
SELECT * FROM products WHERE price < @myvar;

宣告時同時設定初始值

SQL Server 2008 以後版本支援:

DECLARE @myvar INT = 100;

多個變數

DECLARE @name VARCHAR(50), @age INT;
SET @name = '張三';
SET @age = 25;

變數實務應用 (Example)

儲存計算結果

DECLARE @avg_salary DECIMAL(10,2);
SELECT @avg_salary = AVG(Salary) FROM employees;

-- 找出高於平均薪資的員工
SELECT Name, Salary 
FROM employees 
WHERE Salary > @avg_salary;

動態計算

DECLARE @tax_rate DECIMAL(5,2) = 0.05;

SELECT 
    product_name,
    price,
    price * @tax_rate AS tax,
    price * (1 + @tax_rate) AS total
FROM products;

MySQL vs SQL Server 變數比較

特性MySQLSQL Server
變數前綴@@
需宣告不需要需要 DECLARE
設值語法SET 或 :=SET 或 SELECT
作用範圍連線期間有效批次或程序內有效

系統變數

除了使用者定義變數,資料庫還有系統變數,用來控制資料庫行為或取得系統資訊。

MySQL 系統變數:

-- 查看系統變數
SHOW VARIABLES LIKE 'max_connections';

-- 全域變數使用 @@
SELECT @@version;

SQL Server 系統變數:

-- 系統函數
SELECT @@VERSION;
SELECT @@ROWCOUNT;  -- 上一個語句影響的列數
SELECT @@IDENTITY;  -- 最後插入的自動編號值