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 |

分类: SQL Server
漫思
浙公网安备 33010602011771号