9.1 SQL Server变量

变量

什么是变量

变量是保存特定类型的单个值的对象,例如整数(integer)、日期(date)或可变字符串(varchar)。

通常在以下情况下使用变量:

  • 作为循环计数器,计算执行循环的次数。
  • 保存一个要由控制流语句(如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语句。例如,以下语句将2018赋值给@model_year变量:

SET @model_year = 2018;

在查询中使用变量

以下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 'The number of products is ' + CAST(@product_count AS VARCHAR(MAX));

输出:

The number of products is 204

如果想隐藏受影响消息的行数,请使用以下语句:

SET NOCOUNT ON;

在SELECT子句中给变量赋值

以下声明两个变量、为其分配记录(SELECT的结果)以及输出变量的内容:

首先,声明保存产品名称和价格的变量:

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表中选择了产品名称列表。在SELECT列表中,我们将产品名称累加到@product_list变量中。注意,CHAR(10)返回换行符。
  • 然后我们使用PRINT打印出产品列表。

执行上述存储过程:

EXEC uspGetProductList 2018

posted @ 2023-01-30 10:32  平元兄  阅读(238)  评论(0编辑  收藏  举报