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_year
从products
表中选择了产品名称列表。在SELECT
列表中,我们将产品名称累加到@product_list
变量中。注意,CHAR(10)
返回换行符。 - 然后我们使用
PRINT
打印出产品列表。
执行上述存储过程:
EXEC uspGetProductList 2018