sqlserver------数据库的存储过程(练习)

简介: sqlserver------数据库的存储过程(练习)

对于数据库的存储过程之前的专题有讲过


这里具体讲述存储过程的编写方法:


例题:有heat表和eatables两张表,分别为:


eatables



heat:protein(蛋白质),fat(脂肪),sugar(含糖量),kj(热量),以100克为单位



1.写一个存储过程Diet,以食物重量(克)为参数,输出该重量的不同类产品中,蛋白质成分最高的食物及其蛋白质含量。输出类似如下:


exec Diet 200


由于检索内容较为复杂:


所以先写检索内容:


s

elect name,a.type,max
  from(select type,max(protein)*(@num/100) max from eatables,heat
  where heat.id = eatables.id
  group by type)p,
  eatables as a,heat as b
  where b.protein*(@num/100)=p.max and a.id=b.id

接着加上存储过程:


create procedure Diet(
  @num int
)
as
begin
  declare @name varchar(10),@type varchar(10),@max decimal(8,2)
  declare diet_cursor cursor for
  select name,a.type,max
  from(select type,max(protein)*(@num/100) max from eatables,heat
  where heat.id = eatables.id
  group by type)p,
  eatables as a,heat as b
  where b.protein*(@num/100)=p.max and a.id=b.id
open diet_cursor
fetch next from diet_cursor into @name,@type,@max
while @@FETCH_STATUS=0
begin
print '在' +@type+'食品中'
print '每'+convert(varchar,@num)+'克'+@name+'含有的蛋白质最高,达到'+convert(varchar,@max)+'克'
fetch next from diet_cursor into @name,@type,@max
end
close diet_cursor
deallocate diet_cursor
end

输入


exec Diet 200




2.写一个存储过程HeatReport,找出平均糖含量最高的食物及其糖含量。输出类似如下:

exec HeatReport;


先写检索过程:


select top 1 type,avg_sugar from
  (select type,sum(sugar)/count(1) as avg_sugar from eatables,heat
  where eatables.id=heat.id
  group by type)p
  order by p.avg_sugar desc

再写存储过程


create procedure HeatReport
as
begin
  declare @type varchar(10),@avg_sugar decimal(8,2)
  declare diet_cursor cursor for
  select top 1 type,avg_sugar from
  (select type,sum(sugar)/count(1) as avg_sugar from eatables,heat
  where eatables.id=heat.id
  group by type)p
  order by p.avg_sugar desc
  open diet_cursor
  fetch next from diet_cursor into @type,@avg_sugar
  while @@FETCH_STATUS=0
  begin
  print'在面类,米面类,水产类食品中'
  print @type+'的平均糖含量最高,达到每100克食物含有'+convert(varchar,@avg_sugar)+'克'
  fetch next from diet_cursor into @type,@avg_sugar
  end
close diet_cursor
deallocate diet_cursor
end

输入

exec HeatReport


得:


目录
相关文章
|
5月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
1009 152
|
5月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
808 156
|
5月前
|
SQL 人工智能 Linux
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
528 5
SQL Server 2025 RC1 发布 - 从本地到云端的 AI 就绪企业数据库
|
5月前
|
关系型数据库 分布式数据库 数据库
阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。
|
6月前
|
SQL 人工智能 Linux
SQL Server 2025 RC0 发布 - 从本地到云端的 AI 就绪企业数据库
SQL Server 2025 RC0 发布 - 从本地到云端的 AI 就绪企业数据库
335 5
|
10月前
|
SQL 数据库 数据安全/隐私保护
数据库数据恢复——sql server数据库被加密的数据恢复案例
SQL server数据库数据故障: SQL server数据库被加密,无法使用。 数据库MDF、LDF、log日志文件名字被篡改。 数据库备份被加密,文件名字被篡改。
|
SQL 数据库
数据库数据恢复—SQL Server数据库报错“错误823”的数据恢复案例
SQL Server附加数据库出现错误823,附加数据库失败。数据库没有备份,无法通过备份恢复数据库。 SQL Server数据库出现823错误的可能原因有:数据库物理页面损坏、数据库物理页面校验值损坏导致无法识别该页面、断电或者文件系统问题导致页面丢失。
338 13
数据库数据恢复—SQL Server数据库报错“错误823”的数据恢复案例
|
7月前
|
SQL 存储 数据库
SQL Server Management Studio (SSMS) 21 - 微软数据库管理工具
SQL Server Management Studio (SSMS) 21 - 微软数据库管理工具
1202 0
|
7月前
|
SQL XML Java
配置Spring框架以连接SQL Server数据库
最后,需要集成Spring配置到应用中,这通常在 `main`方法或者Spring Boot的应用配置类中通过加载XML配置或使用注解来实现。
584 0
|
9月前
|
SQL 人工智能 数据库
SQL Server 2025 - 从本地到云端的 AI 就绪企业数据库
SQL Server 2025 - 从本地到云端的 AI 就绪企业数据库
675 0
SQL Server 2025 - 从本地到云端的 AI 就绪企业数据库