SQL Server變數

在本教學中,將學習變數,包括聲明變數,設置其值以及將記錄的值字段分配給變數。

變數是什麼

變數是保存特定類型的單個值的對象,例如整數,日期或變化的字串。
通常在以下情況下使用變數:

  • 作為迴圈計數器來計算迴圈執行的次數。
  • 保持要通過控制流語句(如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_yearproducts表中選擇了產品名稱列表。 在選擇列表中,將產品名稱累積到@product_list變數中。 請注意,CHAR(10)返回換行符。
  • 第三,使用PRINT語句列印出產品列表。

以下語句執行uspGetProductList存儲過程:

EXEC uspGetProductList 2018

執行上面查詢語句,得到以下結果:

將值累積到變數中


上一篇: SQL Server存儲過程 下一篇: SQL Server用戶定義函數