DECLARE 變數宣告 (SQL DECLARE Statement)
DECLARE 語句用來宣告區域變數,主要用於 SQL Server 和 MySQL 的預存程序、函數或批次處理中。
SQL Server DECLARE 語法
DECLARE @variable_name data_type [= initial_value];
基本宣告
DECLARE @name VARCHAR(50);
DECLARE @age INT;
DECLARE @salary DECIMAL(10,2);
宣告並設定初始值
DECLARE @count INT = 0;
DECLARE @message VARCHAR(100) = 'Hello';
同時宣告多個變數
DECLARE
@name VARCHAR(50),
@age INT,
@active BIT = 1;
設定變數值
宣告後使用 SET 或 SELECT 來設定變數值:
DECLARE @total INT;
-- 使用 SET
SET @total = 100;
-- 使用 SELECT (可從查詢結果設值)
SELECT @total = COUNT(*) FROM orders;
SET 與 SELECT 的差異
-- SET 一次只能設定一個變數
SET @var1 = 1;
SET @var2 = 2;
-- SELECT 可以同時設定多個變數
SELECT @var1 = 1, @var2 = 2;
-- SELECT 可以從資料表取值
SELECT @name = Name, @age = Age FROM customers WHERE id = 1;
DECLARE 用法範例 (Example)
儲存查詢結果
DECLARE @max_price DECIMAL(10,2);
DECLARE @min_price DECIMAL(10,2);
SELECT
@max_price = MAX(Price),
@min_price = MIN(Price)
FROM products;
-- 使用變數
SELECT * FROM products
WHERE Price = @max_price OR Price = @min_price;
計數器應用
DECLARE @counter INT = 1;
WHILE @counter <= 5
BEGIN
PRINT '計數: ' + CAST(@counter AS VARCHAR);
SET @counter = @counter + 1;
END
MySQL DECLARE
在 MySQL 中,DECLARE 只能在預存程序或函數內使用,且必須放在程序區塊的開頭:
DELIMITER //
CREATE PROCEDURE example_proc()
BEGIN
DECLARE my_var INT DEFAULT 0;
DECLARE my_name VARCHAR(50);
SET my_var = 100;
SELECT name INTO my_name FROM customers LIMIT 1;
END //
DELIMITER ;
MySQL 的區域變數不需要 @ 前綴,而使用者定義變數才需要 @。
變數作用範圍
| 資料庫 | 作用範圍 |
|---|---|
| SQL Server | 宣告所在的批次 (batch) 或預存程序內 |
| MySQL | 宣告所在的 BEGIN...END 區塊內 |
批次結束或程序執行完畢後,區域變數就會被釋放。
資料表變數 (Table Variable)
SQL Server 支援宣告資料表類型的變數:
DECLARE @temp_table TABLE (
id INT,
name VARCHAR(50)
);
INSERT INTO @temp_table VALUES (1, '張一'), (2, '王二');
SELECT * FROM @temp_table;