在抽题的时候很容易碰到这样子的一个情况:50道题共100,也就是每道题2分,若是手动一个一个填不得累死啊。我就碰到这样子的一个问题了。于是就写了这个简单的存储过程来做这个事儿,执行过后大部分题目的分值都搞定了,小部分的手调+小调即OK。
?
简单思路和业务:
1、根据试卷总分和题目总量计算平均分数(整数);
2、获取所有题目的总分;
3、用试卷的总分减去题目的总分,得到的差值追加到最后一道题目中。
?
实现过程如下:
ALTER PROCEDURE avgScore @id int --试卷序号ASBEGIN 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 [email protected]; select @count = count(field1) from table89 where [email protected]; if(@field6>0 and @count>0)--两个都有值 begin set @avg = @[email protected];--获取平均值 --将分值分不到各个题目当中去 update table89 set [email protected] where [email protected]; set @sum = @[email protected]; set @sum = @[email protected];--获取两者之间的差值 --更新最后一道题目的分数,也就是将所有剩下的分数给最后一道题 update table89 set field11=isnull(field11,0)[email protected] where field1=(select top 1 field1 from table89 where [email protected] order by field1 desc); endEND
?