数据库:存储过程实验

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介: 一、实验目的及要求目的掌握存储过程的编写与调用要求掌握存储过程的编写;掌握存储过程的调用

一、实验目的及要求

目的

掌握存储过程的编写与调用

要求

掌握存储过程的编写;掌握存储过程的调用

二、实验条件

安装有SQL Server2014数据库的计算机

三、实验内容

使用事务、锁和游标;编写和使用存储过程;使用触发器

四、实验结果

1.使用事务方式往院系表(t_department)中添加院系信息。信息分别为:(1)04,电器工程系,伏特;(2)04,机械工程系,墨子。要求两条记录同时添加,若错误则回滚,最后查询当前院系表中的数据信息。注意要查看输出的结果信息和消息信息。

参考代码:

use EMISE

go

begintran mytran

insertinto t_department values('04','电器工程系','欧姆')

insertinto t_department values('04','机械工程系','墨子')

if@@ERROR>0

rollbacktran mytran

else

committran mytran

select*from t_department

 

查看结果:

正在上传…重新上传取消

查看信息:

 

正在上传…重新上传取消

 

2.把题目 1 中的数据改为(1)04,电器工程系,伏特;(2)05,机械工程系,墨子;再次运行代码,查看结果和消息。

结果:

正在上传…重新上传取消

 

消息:

正在上传…重新上传取消

 

3.使用存储过程中定义事务实现银行转账业务处理。

usemaster

go

ifDB_ID('bankdb')isnotnull

dropdatabase bankdb;

go

createdatabase bankdb

go

use bankdb

go

createtable account(

id intidentity(1,1)primarykey,

cardno char(20)uniquenotnull,

balance numeric(18,2)

)

go

insertinto account values('01',100.0)

insertinto account values('02',200.0)

insertinto account values('03',300.0)

go

--创建存储过程

createprocedure sp_transfer_money

@out_cardno char(20),

@in_cardno char(20),

@money numeric(18,2)

as

begin

declare @remain numeric(18,2)

select @remain=balance from account where cardno=@out_cardno

if @money>0

if @remain>=@money --余额足够

begin

begintran t1

update account set balance=balance-@money where cardno=@out_cardno

update account set balance=balance+@money where cardno=@in_cardno

if@@error>0

begin---wrong

rollbacktran t1

return 0

end

else

begin---right

committran t1

print'转账成功!'

end

end

else---余额少

begin

print'余额不足'

end

else--- 转账金额小于0

print'转账金额应大于0!'

end

go

exec sp_transfer_money '01','02',50

正在上传…重新上传取消

 

4.在SQL Server中查看数据库中的锁。

(1)使用快捷键“Ctrl+2”查看锁的信息。

打开SQL Server2014的SSMS,在查询分析器中使用快捷键“Ctrl+2”,即可看到进程、锁已经对象等信息,如下图所示:

正在上传…重新上传取消

 

(2)使用系统存储过程sp_lock来查看数据库中的锁。

在新建查询的编辑区内,键入“EXEC sp_lock”,执行这个命令也可以查看当前数据库中的锁。

EXECsp_lock

正在上传…重新上传取消

 

5.使用表级锁。在 SQL Server 中模拟两个用户对表进行操作,其中一个用户查看学生表信息,并锁定 20ms;另一个用户也查看学生表,并要更新其中的数据。

(1)创建一个新的查询窗口,在编辑区窗口内键入如下代码,并保存为user1_lock.sql。

use EMISE

go

begintran t1

declare @sd_time varchar(8)

select*from t_student with(holdlock)

select @sd_time=convert(varchar,getdate(),8)

print'用户1锁定时间为:'+@sd_time

waitfordelay'00:00:20'

select @sd_time=convert(varchar,getdate(),8)

print'用户1锁定时间为:'+@sd_time

committran t1

正在上传…重新上传取消

 

(2)创建一个新的查询窗口,在编辑区窗口键入如下代码,并保存为user2_update.sql。

use EMISE

go

begintran t2

declare @sd_time varchar(8)

--select *from t_student with(holdlock)

select @sd_time=convert(varchar,getdate(),8)

print'用户2开始时间为:'+@sd_time

select*from t_student

select @sd_time=convert(varchar,getdate(),8)

print'用户2执行查询的时间为:'+@sd_time

update t_student setname='wang'wherename='王庆子'

select @sd_time=convert(varchar,getdate(),8)

print'用户2更新数据的时间为:'+@sd_time

committran t2

正在上传…重新上传取消

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
2月前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
84 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
2月前
|
存储 SQL 关系型数据库
MySql数据库---存储过程
MySql数据库---存储过程
41 5
|
7月前
|
存储 SQL 数据库
数据库sql语句-----游标和存储过程
数据库sql语句-----游标和存储过程
57 1
|
4月前
|
存储 SQL 安全
【数据库高手的秘密武器:深度解析SQL视图与存储过程的魅力——封装复杂逻辑,实现代码高复用性的终极指南】
【8月更文挑战第31天】本文通过具体代码示例介绍 SQL 视图与存储过程的创建及应用优势。视图作为虚拟表,可简化复杂查询并提升代码可维护性;存储过程则预编译 SQL 语句,支持复杂逻辑与事务处理,增强代码复用性和安全性。通过创建视图 `high_earners` 和存储过程 `get_employee_details` 及 `update_salary` 的实例,展示了二者在实际项目中的强大功能。
44 1
|
4月前
|
存储 SQL JSON
【Azure Logic App】微软云逻辑应用连接到数据库,执行存储过程并转换执行结果为JSON数据
【Azure Logic App】微软云逻辑应用连接到数据库,执行存储过程并转换执行结果为JSON数据
【Azure Logic App】微软云逻辑应用连接到数据库,执行存储过程并转换执行结果为JSON数据
|
4月前
|
存储 SQL 数据库
触发器的设计、掌握存储过程的基本概念和创建、执行、删除方法。掌握数据库备份的方法和数据库恢复的方法。
这篇文章介绍了数据库中触发器的设计概念,包括创建、修改、删除触发器的方法,并通过实验内容教授如何使用SQL命令创建DML触发器以及如何利用触发器实现数据的完整性和自动化处理。
触发器的设计、掌握存储过程的基本概念和创建、执行、删除方法。掌握数据库备份的方法和数据库恢复的方法。
|
4月前
|
JSON 数据格式 Java
化繁为简的魔法:Struts 2 与 JSON 联手打造超流畅数据交换体验,让应用飞起来!
【8月更文挑战第31天】在现代 Web 开发中,JSON 成为数据交换的主流格式,以其轻量、易读和易解析的特点受到青睐。Struts 2 内置对 JSON 的支持,结合 Jackson 库可便捷实现数据传输。本文通过具体示例展示了如何在 Struts 2 中进行 JSON 数据的序列化与反序列化,并结合 AJAX 技术提升 Web 应用的响应速度和用户体验。
131 0
|
4月前
|
存储 SQL 数据库
|
6月前
|
存储 SQL 关系型数据库
MySQL数据库进阶第四篇(视图/存储过程/触发器)
MySQL数据库进阶第四篇(视图/存储过程/触发器)
|
6月前
|
存储 关系型数据库 MySQL
MySQL数据库——存储过程-条件处理程序(通过SQLSTATE指定具体的状态码,通过SQLSTATE的代码简写方式 NOT FOUND)
MySQL数据库——存储过程-条件处理程序(通过SQLSTATE指定具体的状态码,通过SQLSTATE的代码简写方式 NOT FOUND)
50 0
MySQL数据库——存储过程-条件处理程序(通过SQLSTATE指定具体的状态码,通过SQLSTATE的代码简写方式 NOT FOUND)