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

 
分类: SQL Server

posted on 2025-04-21 16:51  漫思  阅读(24)  评论(0)    收藏  举报

导航