在本教學中,將學習變數,包括聲明變數,設置其值以及將記錄的值字段分配給變數。
變數是什麼
變數是保存特定類型的單個值的對象,例如整數,日期或變化的字串。
通常在以下情況下使用變數:
- 作為迴圈計數器來計算迴圈執行的次數。
- 保持要通過控制流語句(如
WHILE
)進行測試的值。 - 存儲函數或存儲過程返回的值。
聲明變數
要聲明變數,請使用DECLARE
語句。 例如,以下語句聲明了一個名為@model_year
的變數:
DECLARE @model_year SMALLINT;
DECLARE
語句通過為變數分配名稱和數據類型來初始化變數。 變數名必須以@
符號開頭。 在此示例中,@model_year
變數的數據類型為SMALLINT
。
默認情況下,聲明變數時,其值設置為NULL
。
在變數名和數據類型之間,可以使用可選的AS
關鍵字,如下所示:
DECLARE @model_year AS SMALLINT;
要聲明多個變數,可以用逗號分隔變數:
DECLARE @model_year SMALLINT,
@product_name VARCHAR(MAX);
變數賦值
要為變數賦值,請使用SET
語句。 例如,以下語句將2020
分配給@model_year
變數:
SET @model_year = 2020;
在查詢中使用變數
以下SELECT
語句在WHERE子句中使用@model_year
變數來查找特定模型年的產品:
SELECT
product_name,
model_year,
list_price
FROM
production.products
WHERE
model_year = @model_year
ORDER BY
product_name;
現在,可以將所有內容放在一起並執行以下代碼塊以獲取型號年份為2018
的產品列表:
DECLARE @model_year SMALLINT;
SET @model_year = 2018;
SELECT
product_name,
model_year,
list_price
FROM
production.products
WHERE
model_year = @model_year
ORDER BY
product_name;
執行上面查詢語句,得到以下結果:
請注意,要執行代碼,請單擊“執行”按鈕,如下圖所示:
將查詢結果存儲在變數中
以下步驟描述了如何將查詢結果存儲在變數中:
首先,使用整數數據類型聲明一個名為@product_count
的變數:
DECLARE @product_count INT;
其次,使用SET
語句將查詢的結果集分配給變數:
SET @product_count = (
SELECT
COUNT(*)
FROM
production.products
);
第三,輸出@product_count
變數的內容:
SELECT @product_count;
或者,也可以使用PRINT
語句列印出變數的內容:
PRINT @product_count;
或者,
PRINT '產品數量為 '+ CAST(@product_count AS VARCHAR(MAX));
消息選項卡中的輸出如下:
要隱藏受影響的消息的行數,請使用以下語句:
SET NOCOUNT ON;
選擇記錄到變數
以下步驟說明了如何聲明兩個變數,為它們分配記錄以及輸出變數的內容:
首先,聲明聲明兩個變數:產品名稱(product_name
)和價格(list_price
):
DECLARE
@product_name VARCHAR(MAX),
@list_price DECIMAL(10,2);
其次,將列名分配給相應的變數:
SELECT
@product_name = product_name,
@list_price = list_price
FROM
production.products
WHERE
product_id = 100;
第三,輸出變數的內容:
SELECT
@product_name AS product_name,
@list_price AS list_price;
執行上面查詢語句,得到以下結果:
將值累積到變數中
以下存儲過程採用一個參數並以字串形式返回產品列表:
CREATE PROC uspGetProductList(
@model_year SMALLINT
) AS
BEGIN
DECLARE @product_list VARCHAR(MAX);
SET @product_list = '';
SELECT
@product_list = @product_list + product_name
+ CHAR(10)
FROM
production.products
WHERE
model_year = @model_year
ORDER BY
product_name;
PRINT @product_list;
END;
在此存儲過程中:
- 首先,使用不同的字串類型聲明了一個名為
@product_list
的變數,並將其值設置為空。 - 其次,根據輸入
@model_year
從products
表中選擇了產品名稱列表。 在選擇列表中,將產品名稱累積到@product_list
變數中。 請注意,CHAR(10)
返回換行符。 - 第三,使用
PRINT
語句列印出產品列表。
以下語句執行uspGetProductList
存儲過程:
EXEC uspGetProductList 2018
執行上面查詢語句,得到以下結果: