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
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· DeepSeek “源神”启动!「GitHub 热点速览」
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器