存储过程
目录
创建数据库、创建表
代码如下:
create table Score
(
sid int PRIMARY KEY, /*学生准考证号*/
target_district char(1), /*考生报考地区 ‘e’、’s’、‘w’、’n’分别代表东、南、西、北*/
total_score int,/*考生总分*/
race char(20) /*考生所属民族、种族*/
)
GO
截图如下:
编写存储过程-创建执行对象插入值
代码如下:
CREATE PROC [dbo].score_generator
@id int,
@tar_dis char(1),
@t_s int,
@r char(20)
AS
INSERT INTO [dbo].Score VALUES (@id,@tar_dis,@t_s,@r);
GO
截图如下:
编写存储过程-生成种族地区函数
代码如下:
DECLARE @index int,
@Set_id int,
@Set_tar_dis char(1),
@Set_t_s int,
@Set_r char(20),
@rand int,
@flag int
SET @index = 1
SET @flag = 0
SET NOCOUNT ON;
SET IMPLICIT_TRANSACTIONS OFF
BEGIN TRAN BULKINSERT
WHILE @index < 1000
BEGIN
IF(@index % 10 = 0)
BEGIN
BEGIN TRANSACTION BULKINSERT
END
SET @rand = RAND() * 100
SET @Set_id = @index
SET @Set_tar_dis = ( CASE WHEN (@rand % 4 = 0) THEN 'W'
WHEN (@rand %4 = 1) THEN 'E'
WHEN (@rand %4 = 2) THEN 'N'
ELSE 'S'
END)
SET @Set_t_s = @rand
SET @Set_r = ( CASE WHEN (@rand % 10 = 0) THEN '汉族'
WHEN (@rand %10 = 1) THEN '满族'
WHEN (@rand %10 = 2) THEN '回族'
WHEN (@rand %10 = 3) THEN '土家族'
WHEN (@rand % 10 = 4) THEN '苗族'
WHEN (@rand %10 = 5) THEN '壮族'
WHEN (@rand %10 = 6) THEN '蒙古族'
WHEN (@rand %10 = 7) THEN '维吾尔族'
WHEN (@rand % 10 = 8) THEN '瑶族'
WHEN (@rand %10 = 9) THEN '傣族'
ELSE '朝鲜族'
END)
EXEC [dbo].score_generator @id = @Set_id,@tar_dis = @Set_tar_dis,@t_s = @Set_t_s, @r = @Set_r
IF(@index % 10 = 0)
BEGIN
IF(@@ROWCOUNT = 10)
BEGIN
COMMIT TRANSACTION BULKINSERT
END
IF(@@ROWCOUNT != 10)
BEGIN
ROLLBACK TRANSACTION BULKINSERT
END
END
SET @index = @index + 1;
END
截图如下:
编写存储过程-查看存储结果
代码如下:
SELECT *
FROM [dbo].[Score];
截图如下:
编写存储过程-更新数据函数
代码如下:
create proc update_score
as
begin
declare @target_district char(1),@total_score int,@race char(20)
declare yb cursor scroll
for select target_district,total_score,race from dbo.Score
open yb
fetch next from yb
into @target_district,@total_score,@race
while @@FETCH_STATUS=0
begin
if(@target_district='w')
begin
if(@race='汉族')
update dbo.Score set
total_score+=10 where current of yb
else
update dbo.Score set
total_score+=15 where current of yb
end
else
if(@race!='汉族')
update dbo.Score set
total_score+=10 where current of yb
if(@total_score>750)
update dbo.Score set
total_score=750 where current of yb
fetch next from yb into @target_district,@total_score,@race
end
close yb
deallocate yb
end
截图如下:
编写存储过程-执行更新数据函数
代码如下:
execute update_score
截图如下:
实验后的数据结果对比
前:
后:
第6行数据对比:报考西部地区的非少数民族考生总分加10分;
第1行数据对比:报考非西部的少数民族考生总分加10分;
第10行数据对比:报考西部的少数民族考生总分加15分
实验总结:
首先要熟悉整个实验的步骤,然后逐个去攻破,从整个实验来看,有几个函数需要执行,种族、地区、存储、更新数据等,在还没有进行实验之前,上网查询了解存储的过程,对整个存储过程有了概念,之后每个实验功能实现逐个学习,最后顺利完成实验。过程中加深了对游标的使用,加深了对存储过程的学习。