在抽题的时候很容易碰到这样子的一个情况:50道题共100,也就是每道题2分,若是手动一个一个填不得累死啊。我就碰到这样子的一个问题了。于是就写了这个简单的存储过程来做这个事儿,执行过后大部分题目的分值都搞定了,小部分的手调+小调即OK。
简单思路和业务:
1、根据试卷总分和题目总量计算平均分数(整数);
2、获取所有题目的总分;
3、用试卷的总分减去题目的总分,得到的差值追加到最后一道题目中。
实现过程如下:
ALTER PROCEDURE avgScore
@id int --试卷序号
AS
BEGIN
SET NOCOUNT ON;
--1、校验试卷序号不能为空
if(@id is null or @id<=0)
begin
raiserror('必须提供试卷信息',16,1);
return ;
end
--2、获取当前试卷的分数
declare @field6 int;--考试总分
declare @count int;--当前试卷题目总数
declare @avg int;--平均数
declare @sum int;--总分,各个题目的分数之和,可能<=总分
select @field6=field6 from table88 where field1=@id;
select @count = count(field1) from table89 where field2=@id;
if(@field6>0 and @count>0)--两个都有值
begin
set @avg = @field6/@count;--获取平均值
--将分值分不到各个题目当中去
update table89 set field11=@avg where field2=@id;
set @sum = @avg*@count;
set @sum = @field6-@sum;--获取两者之间的差值
--更新最后一道题目的分数,也就是将所有剩下的分数给最后一道题
update table89 set field11=isnull(field11,0)+@sum where field1=(select top 1 field1 from table89 where field2=@id order by field1 desc);
end
END
本文介绍了一个简单的存储过程,用于根据试卷总分和题目数量自动计算并分配每道题目的分数,通过调整最后一题的分数来确保总分准确无误。
1349

被折叠的 条评论
为什么被折叠?



