数据库:存储过程实验

一、实验目的及要求

目的

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

要求

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

二、实验条件

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

三、实验内容

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

四、实验结果

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

参考代码:

use EMISE

go

begin tran mytran

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

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

if @@ERROR>0

rollback tran mytran

else

commit tran mytran

select *from t_department

 

查看结果:

uploading.4e448015.gif正在上传…重新上传取消

查看信息:

 

uploading.4e448015.gif正在上传…重新上传取消

 

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

结果:

uploading.4e448015.gif正在上传…重新上传取消

 

消息:

uploading.4e448015.gif正在上传…重新上传取消

 

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

use master

go

if DB_ID('bankdb') is not null

drop database bankdb;

go

create database bankdb

go

use bankdb

go

create table account(

id int identity(1,1) primary key,

cardno char(20) unique not null,

balance numeric(18,2)

)

go

insert into account values('01',100.0)

insert into account values('02',200.0)

insert into account values('03',300.0)

go

--创建存储过程

create procedure 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

begin tran 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

rollback tran t1

return 0

end

else

begin ---right

commit tran t1

print '转账成功!'

end

end

else ---余额少

begin

print '余额不足'

end

else --- 转账金额小于0

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

end

go

exec sp_transfer_money '01','02',50

uploading.4e448015.gif正在上传…重新上传取消

 

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

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

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

uploading.4e448015.gif正在上传…重新上传取消

 

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

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

EXEC sp_lock

uploading.4e448015.gif正在上传…重新上传取消

 

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

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

use EMISE

go

begin tran t1

declare @sd_time varchar(8)

select *from t_student with(holdlock)

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

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

waitfor delay '00:00:20'

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

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

commit tran t1

uploading.4e448015.gif正在上传…重新上传取消

 

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

use EMISE

go

begin tran 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 set name='wang' where name='王庆子'

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

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

commit tran t2

uploading.4e448015.gif正在上传…重新上传取消

 

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
一、实验目的 1.掌握SQL Server 2005的安装。 2.掌握SQL Server Management Studio的启动和使用。 3.掌握SQL Server 2005服务器的配置和注册。 4.掌握SQL Server 2005查询的基本使用。 5.掌握应用SQL Server Management Studio创建数据库的方法。 6.掌握应用SQL Server Management Studio修改和查看数据库的方法。 7.掌握应用SQL Server Management Studio删除数据库的方法。 8.掌握应用Transact-SQL语句创建数据库的方法。 9.掌握应用Transact-SQL修改和查看数据库的方法。 10.掌握通过Transact-SQL删除数据库的方法。 11.掌握SQL Server 2005数据库和操作系统物理文件的关系。 12.掌握数据库的分离和附加方法。 二、实验内容 1.完成SQL Server 2005开发版的安装。 提示:若计算机系统中已经安装有SQL Server 2005系统,则在安装时需要选择安装命名实例。安装过程中身份验证模式选择“混合模式”并设置sa账户的密码。 2.利用SQL Server配置管理器启动、停止SQL Server服务(包括默认实例和命名实例),配置SQL Server服务为自动启动。 3.利用SQL Server配置管理器配置进行SQL Server 2005网络配置,启用默认实例和命名实例的TCP/IP协议。 4.利用SQL Server外围配置器配置数据库引擎的服务及远程连接,设置为“本地连接和远程连接”,选择“同时使用TCP/IP和named pipes”。 5.利用SQL Server Management Studio注册安装的命名实例。 6.利用SQL Server Management Studio注册远程服务器。 提示:注册远程服务器时需要使用混合验证模式,利用sa账户和密码登录远程服务器。 7.启动SQL Server Management Studio,连接到服务器。新建一个查询,在其中输入如下代码: DECLARE @position int, @string char(5) SET @position = 1 SET @string = 'China' WHILE @position <= DATALENGTH(@string) BEGIN SELECT SUBSTRING(@string, @position, 1) 字符, ASCII(SUBSTRING(@string, @position, 1)) ASCII码 SET @position = @position + 1 END
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唐曌

谢谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值