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用户定义函数