一种在SQLServer中实现考号的批量生成算法
2013-04-15陈印
陈印
(四川职业技术学院计科系,四川遂宁 629000)
一种在SQLServer中实现考号的批量生成算法
陈印
(四川职业技术学院计科系,四川遂宁629000)
摘要:本文以遂宁市中考管理系统为例,介绍了一种在SQLServer中通过存储过程在数据库端实现指定范围学生考号的批量生成算法.
关键词:SQLServer;存储过程;Top;算法
1 引言
考号的编排是考生管理系统中的重要功能模块.在遂宁市中考管理系统中,每年考生人数达3-5万人,由于考生不均衡地分布在不同区县,所以每年中考报名结束后,都需要根据就近的原则在不同的区县设置考点以满足中考管理的需要.由于每年各学校参考人数均有较大变化,尤其是边远乡镇,因此考点的设置每年都可能有变化,考号也就需要灵活地考虑人数、地域等多方面因素来批量生成.
考号的生成是一个大批量数据的操作,需要反复运算并更新数据库中的数据.如果将考号的生成完全交由W E B应用程序端来处理,这个系统开销的代价是很大的.SQLServer中的存储过程为解决这一难题提供了高效的解决办法,仅需由WEB应用程序提供少量数据,SQLServer就能在数据库服务器端轻易实现考号的批量生成.
2 解决方案
从遂宁市中考管理系统需求分析来看,考号要求设置为14位数字编码,其中包含4位年份、4位区县编号、2位考点号、2位考室号以及2位座位序号.原则上,同一区县内单独划分考点,有1000名学生左右的学校可单独设立一个考点,其他未满足条件的学校可在县区或乡镇集中设立考点.因此,考点的设立无法简单地由程序自动完成,必须由人工设置.当考点确立后,考生对应的考点号也就随之确定,其完整考号的生成也就可以由完全由程序来完成.在该系统中,学生信息存放在students表,该表包含有学生所属学校号schId(char(6),前4位为区县号,后2位为学校编号)、考号applyNum(char(14),初始值Nul l).
2.1算法思想
为了给每个学生都生成一个唯一的、顺序的考号,从本质上讲应该是对表中记录的逐行更新.在SQLServer中,游标是逐行操作的典型对象.不过,在SQLServer中巧妙地应用T op关键字同样可以达到逐行操作的目的.那T op又将如何实现逐行的批量操作呢?
我们知道,T op可用于查询按照某种顺序排列的结果集中的前n行数据记录.我们将需要进行考号编排的考生结果集命名为S(其考号字段值为Nul l),可以通过T op 1从S集合中获取1行数据s对其进行考号编排,此后s?S;继续从stu中获取1行进行考号编排,以此往复,直到S集合为空.
2.2核心算法(T-SQL)
--@i为考室编号累增器;@exam R oom T otal为本考场最大考室号;@j为座位号累增器;@exam-R oom S eats T otal为标准考室人数;@currentExam-Num为当前运算得到的考号;@schI D s需要分配在本考场的学校号集合
3 案例实现
按照遂宁市中考管理系统需求分析,可在SQLServer中创建存储过程,接收考号年份、学校号、考场号和标准考室人数四个参数,按照考号编排规则自动给指定学校在分配的考场中批量生成考生考号.应用程序端仅需提供相关参数即可实现考号的批量生成.
3.1存储过程的创建
3.2存储过错调用测试
3.3结果验证查询
从查询结果可以看出,580002和580005两个学校的学生考号均已生成,被分配到考场2013580002的不同考室中.
4 综述
综上所述,在S q l S erver中,能够通过多重循环和T op关键字对数据表的多行数据逐一进行操作,从而在没有使用游标、独立于其他程序开发语言的前提下,实现了对考生考号的逐个批量生成.这种方法体现了数据处理的灵活性和独立性,大大提高了数据在数据库端处理的效率,有较大的参考和实用价值.
参考文献:
[1]陈印.存储过程和游标在批量生成学号中的应用[J].福建电脑,2010,(01).
[2]胡百敬、姚巧玫.SQLServer 2005数据库开发详解[M].北京:电子工业出版社,2006.
责任编辑:张隆辉
中图分类号:TP311
文献标识码:B
文章编号:1672-2094(2013)04-0166-02
收稿日期:2013-05-18
作者简介:陈印(1979-),男,四川渠县人,四川职业技术学院计算机科学系讲师。研究方向:计算机软件、数据库开发。