什么是存储过程?

是一组被编译在一起的T-SQL语句的集合,它们被集合在一起以完成一个特定的任务。

存储过程的分类
系统存储过程
扩展存储过程(提供从SQL Server到外部程序的接口,以便进行各种维护活动)

用户自定义的存储过程

存储过程的作用

1.模块化编程
创建一个存储过程存放在数据库中后,就可以被其他程序反复使用。
2.执行速度快
存储过程第一次被执行后,就驻留在内存中。以后执行就省去了重新分析、优化、编译的过程。
3.减少网络通信量
有了存储过程后,在网络上只要一条语句就能执行一个存储过程。
4.保证系统安全性
通过隔离和加密的方法提高了数据库的安全性,通过授权可以让用户只能执行存储过程而不能直接访问数 据库对象。

创建存储过程
CREATE  PROC[EDURE]   存储过程名 
[ { @参数名  数据类型 } [ = default ] [OUTPUT] 
] [ , … n ]
  AS  
   SQL语句 [ … n ]

执行存储过程
[ EXEC [ UTE ] ] 存储过程名      [实参 [, OUTPUT] [, … n] ]

好了,下面开始以我们的实验为例来看看存储过程了:

实验内容:

1, 在图书管理数据库中创建一个存储过程,在用户借书之前,判断该用户能否借书。并进行测试,同时给出测试代码。

2. 在图书管理数据库中创建一个用户借书的存储过程,并测试。同时给出测试代码。

3, 在图书管理数据库中创建一个用户还书的存储过程,并测试。同时给出测试代码。

4, 在图书管理数据库中创建一个删除指定用户的存储过程并测试。同时给出测试代码。

/*1, 在图书管理数据库中创建一个存储过程,在用户借书之前,判断该用户能否借书。并进行测试,*/
同时给出测试代码。
create procedure bjudge_Borrow
@借阅证号 varchar(50),@书号 varchar(50)
as
declare @number int
if @借阅证号 is NULL
return 1
if(select COUNT(*) from Users where 借阅证号 = @借阅证号)=0
return 2
else
begin
select @number = (select COUNT(*) from Loan where 借阅证号 = @借阅证号)
if(select 借书上限-@number from Class_Users,Users where Users.借阅证号=@借阅证号 and 编号 = 分类)<0
return 3
else
begin
if(select 借阅对象 from Books where 书号 = @书号) = '0'
return 4
if((select 借阅对象 from Books where 书号 = @书号) = '23' and ((select 分类 from Users where 借阅证号 = @借阅证号)='2' or (select 分类 from Users where 借阅证号 = @借阅证号)='3'))
return 5
if(((select 借阅对象 from Books where 书号 = @书号) = '23') and ((select 分类 from Users where 借阅证号 = @借阅证号) !='2' and (select 分类 from Users where 借阅证号 = @借阅证号) !='3'))
return 6
if (select 借阅对象 from Books where 书号 = @书号) = '99'
return 7
end
end
------------执行此存储过程---------
declare @ret int,@tip varchar(50)
exec @ret = bjudge_Borrow @借阅证号 = 'G01000', @书号 = 'A04500014'
set @tip = case @ret
   WHEN 1 THEN  '提示: 必须指定一个借阅证号!'
   WHEN 2 THEN  '提示: 指定的借阅证号不存在!'
   WHEN 3 THEN  '提示:  结束已达上限,不可借书!'
   WHEN 4 THEN  '提示: 本书对任何用户可外借 '
   WHEN 5 THEN  '提示: 可以借阅书本!'
   WHEN 6 THEN  '提示6:  不可以借阅!本书只对研究生和教师外借'
   WHEN 7 THEN  '提示:  本书对任何用户不可外借!'
  END
PRINT @tip

/*2、在图书管理数据库中创建一个用户借书的存储过程,并测试。同时给出测试代码。 */
create proc loan_Borrow
@借阅证号 varchar(50),@书号 varchar(50)
as
insert into Loan(借阅证号,书号,借阅日期)values(@借阅证号,@书号,getdate())

------------执行此存储过程--------- 
exec loan_Borrow @借阅证号='Y00001',@书号='A04500011'

/*3、在图书管理数据库中创建一个用户还书的存储过程,并测试。同时给出测试代码。*/
create proc return_book
@借阅证号 varchar(50),@书号 varchar(50)
as
delete from Loan where 借阅证号 = @借阅证号 and 书号 = @书号

------------执行此存储过程--------- 
exec return_book @借阅证号='Y00001',@书号='A04500047'

/*在图书管理数据库中创建一个删除指定用户的存储过程并测试。同时给出测试代码*/
create proc option_delete
@借阅证号 varchar(50)
as
delete from Loan where 借阅证号 = @借阅证号
delete from Loanlist where 借阅证号 = @借阅证号
delete from Money where 借阅证号 = @借阅证号
delete from Reservation where 借阅证号 = @借阅证号
delete from Users where 借阅证号 = @借阅证号

------------执行此存储过程--------- 
exec option_delete 'G01000'

写完之后总感觉有很多要改的地方,比如第一题的判断,我是通过return一个数值,然后使用case语句打印输出的,但这样仿佛和真实的图书馆存储过程有点区别,后来和室友讨论之后,感觉还是使用return语句,直接在判断之后直接print打印出结果,这样的话在执行存储过程的时候只需要输入借阅证号和书号即可,不需要再麻烦的使用case语句了.其他的目前还没有发现有什么别的问题,如果有人看到了我的问题,欢迎指出.

数据库实验六---存储过程相关推荐

  1. 数据库 实验六 存储过程

    存储过程 答案链接链接 2 通过本实验的学习,使学生掌握掌握存储过程的定义和使用方法. 二.实验内容 (1)    删除指定法人在指定日期前的贷款记录.要求法人名称和日期为输入参数. (2)    查 ...

  2. 数据库实验六 存储过程

    1 利用系统存储过程列出当前SQL Server实例中的所有数据库. 2 创建存储过程,查询学生基本信息. 3 创建存储过程,查询特定同学的平均成绩. 4 创建存储过程,查询特定课程的平均成绩. 5 ...

  3. 头歌数据库实验六:存储过程

    转载于头歌数据库实验六:存储过程头歌数据库实验六:存储过程 - Yenshthen研学绅头歌数据库实验六:存储过程 第1关:增加供应商相关列sqty use demo;#代码开始 #在S表中增加一列供 ...

  4. 实验六——存储过程实验

    实验六--存储过程实验 一.实验题目 二.实验目的 三.实验过程 (一)准备数据表 (二)存储过程实验 [存储过程简介] [存储过程优点] 1.创建存储过程 2.查看存储过程 3.修改存储过程 4.删 ...

  5. MySQL数据库实验六 简单数据库应用系统设计与实现

    ★观前提示:本篇内容为mysql数据库实验,代码内容经测试过,可能一小部分有所疏漏,也有会不符合每个人实验的要求的地方,因此以下内容建议仅做思路参考,. 一.实验目的 1.理解并能运用数据库设计的常见 ...

  6. 数据库实验六:完整性语言实验

    数据库实验六 1.参照实验一供应商的表结构,创建供应商表(Supplier1)时定义实体完整性(列级实体完整性). 2.参照实验一供应商的表结构,创建供应商表(Supplier2)时定义实体完整性(表 ...

  7. 数据库实验六综合实验-水果商店进阶一

    文章目录 一.实验目的与要求: 二.实验内容 1. 修正订单详情表orderitems中的水果价格与水果表fruits中的价格一致. 2. 在订单详情表orderitems插入新订单时自动获得水果价格 ...

  8. 数据库实验六 数据库的完整性

    实验六 数据库的完整性 一.实验目的 1.掌握实体完整性的定义和维护方法. 2.掌握参照完整性的定义和维护方法. 3.掌握用户自定义完整性的定义和维护方法. 4.掌0握触发器的设计和使用方法 二.实验 ...

  9. 数据库实验七 存储过程实验

    1.实验目的 掌握数据库存储过程的设计和使用方法. 2.实验内容和要求 存储过程的定义,存储过程运行,存储过程更名,存储过程删除.    3.实验步骤 (1)定义一个存储过程proc1,更新所有订单( ...

最新文章

  1. linux source命令
  2. Windows内核驱动中操作文件
  3. java中List的toArray方法
  4. 一个高性能RPC框架原理剖析
  5. Perl的输出:print、say和printf、sprintf
  6. BZOJ 2326 数学作业(分段矩阵快速幂)
  7. Linux按文件内容查找文件
  8. C++虚继承(十) --- 谈谈陈皓遗留的问题
  9. 排序算法——插入排序
  10. check corners_免费下载:将Mac样式的Hot Corners添加到Windows 10
  11. C 中命名空间的五大常见用法
  12. 为什么建议使用count(*)来统计数据行数
  13. Asp.net 基础(二)
  14. php debug pit,start.php
  15. 推荐一个小工具 -- 微信QQ防撤回
  16. usb转rs485 linux驱动下载,USB转RS485串口驱动
  17. pyecharts 字体大小调整
  18. 北邮带研究生的计算机导师有哪些,GitHub - sunichi/BUPTNiceMentors: 北邮研究生导师口碑榜...
  19. EXIT: Extrapolation and Interpolation-based Neural Controlled Differential Equations for Time-series
  20. ps裁剪和裁切的区别_PS剪切、裁剪、裁切的区别

热门文章

  1. 基于微信小程序的国产动漫论坛小程序
  2. Oracle数据库字符集问题解决方案大全
  3. 达梦中的连接查询方式
  4. 从4G到5G,从物联网到云计算 通信的下一个引爆点在哪里?
  5. 践行社会责任 | 华云数据荣登2021新型实体企业百强榜 用创新技术服务实体经济
  6. macbook配置java环境变量_MAC安装JDK及环境变量配置
  7. 为迎接南京大学2012年110周年校庆 在京校友名录重编工作开始了
  8. 教师节到了,用Python做了个非常好用的学生点名系统
  9. 面向对象开发期末复习概述(七)
  10. 苹果手机数据线充不了电_苹果手机充不进电怎么回事?iPhone充电没反应解决方法...