在本教程中,将学习变量,包括声明变量,设置其值以及将记录的值字段分配给变量。
变量是什么
变量是保存特定类型的单个值的对象,例如整数,日期或变化的字符串。
通常在以下情况下使用变量:
- 作为循环计数器来计算循环执行的次数。
- 保持要通过控制流语句(如
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
执行上面查询语句,得到以下结果: