陳印
(四川職業(yè)技術(shù)學(xué)院計(jì)科系,四川遂寧 629000)
一種在SQLServer中實(shí)現(xiàn)考號(hào)的批量生成算法
陳印
(四川職業(yè)技術(shù)學(xué)院計(jì)科系,四川遂寧629000)
摘要:本文以遂寧市中考管理系統(tǒng)為例,介紹了一種在SQLServer中通過存儲(chǔ)過程在數(shù)據(jù)庫端實(shí)現(xiàn)指定范圍學(xué)生考號(hào)的批量生成算法.
關(guān)鍵詞:SQLServer;存儲(chǔ)過程;Top;算法
考號(hào)的編排是考生管理系統(tǒng)中的重要功能模塊.在遂寧市中考管理系統(tǒng)中,每年考生人數(shù)達(dá)3-5萬人,由于考生不均衡地分布在不同區(qū)縣,所以每年中考報(bào)名結(jié)束后,都需要根據(jù)就近的原則在不同的區(qū)縣設(shè)置考點(diǎn)以滿足中考管理的需要.由于每年各學(xué)校參考人數(shù)均有較大變化,尤其是邊遠(yuǎn)鄉(xiāng)鎮(zhèn),因此考點(diǎn)的設(shè)置每年都可能有變化,考號(hào)也就需要靈活地考慮人數(shù)、地域等多方面因素來批量生成.
考號(hào)的生成是一個(gè)大批量數(shù)據(jù)的操作,需要反復(fù)運(yùn)算并更新數(shù)據(jù)庫中的數(shù)據(jù).如果將考號(hào)的生成完全交由W E B應(yīng)用程序端來處理,這個(gè)系統(tǒng)開銷的代價(jià)是很大的.SQLServer中的存儲(chǔ)過程為解決這一難題提供了高效的解決辦法,僅需由WEB應(yīng)用程序提供少量數(shù)據(jù),SQLServer就能在數(shù)據(jù)庫服務(wù)器端輕易實(shí)現(xiàn)考號(hào)的批量生成.
從遂寧市中考管理系統(tǒng)需求分析來看,考號(hào)要求設(shè)置為14位數(shù)字編碼,其中包含4位年份、4位區(qū)縣編號(hào)、2位考點(diǎn)號(hào)、2位考室號(hào)以及2位座位序號(hào).原則上,同一區(qū)縣內(nèi)單獨(dú)劃分考點(diǎn),有1000名學(xué)生左右的學(xué)??蓡为?dú)設(shè)立一個(gè)考點(diǎn),其他未滿足條件的學(xué)??稍诳h區(qū)或鄉(xiāng)鎮(zhèn)集中設(shè)立考點(diǎn).因此,考點(diǎn)的設(shè)立無法簡(jiǎn)單地由程序自動(dòng)完成,必須由人工設(shè)置.當(dāng)考點(diǎn)確立后,考生對(duì)應(yīng)的考點(diǎn)號(hào)也就隨之確定,其完整考號(hào)的生成也就可以由完全由程序來完成.在該系統(tǒng)中,學(xué)生信息存放在students表,該表包含有學(xué)生所屬學(xué)校號(hào)schId(char(6),前4位為區(qū)縣號(hào),后2位為學(xué)校編號(hào))、考號(hào)applyNum(char(14),初始值Nul l).
2.1算法思想
為了給每個(gè)學(xué)生都生成一個(gè)唯一的、順序的考號(hào),從本質(zhì)上講應(yīng)該是對(duì)表中記錄的逐行更新.在SQLServer中,游標(biāo)是逐行操作的典型對(duì)象.不過,在SQLServer中巧妙地應(yīng)用T op關(guān)鍵字同樣可以達(dá)到逐行操作的目的.那T op又將如何實(shí)現(xiàn)逐行的批量操作呢?
我們知道,T op可用于查詢按照某種順序排列的結(jié)果集中的前n行數(shù)據(jù)記錄.我們將需要進(jìn)行考號(hào)編排的考生結(jié)果集命名為S(其考號(hào)字段值為Nul l),可以通過T op 1從S集合中獲取1行數(shù)據(jù)s對(duì)其進(jìn)行考號(hào)編排,此后s?S;繼續(xù)從stu中獲取1行進(jìn)行考號(hào)編排,以此往復(fù),直到S集合為空.
2.2核心算法(T-SQL)
--@i為考室編號(hào)累增器;@exam R oom T otal為本考場(chǎng)最大考室號(hào);@j為座位號(hào)累增器;@exam-R oom S eats T otal為標(biāo)準(zhǔn)考室人數(shù);@currentExam-Num為當(dāng)前運(yùn)算得到的考號(hào);@schI D s需要分配在本考場(chǎng)的學(xué)校號(hào)集合
按照遂寧市中考管理系統(tǒng)需求分析,可在SQLServer中創(chuàng)建存儲(chǔ)過程,接收考號(hào)年份、學(xué)校號(hào)、考場(chǎng)號(hào)和標(biāo)準(zhǔn)考室人數(shù)四個(gè)參數(shù),按照考號(hào)編排規(guī)則自動(dòng)給指定學(xué)校在分配的考場(chǎng)中批量生成考生考號(hào).應(yīng)用程序端僅需提供相關(guān)參數(shù)即可實(shí)現(xiàn)考號(hào)的批量生成.
3.1存儲(chǔ)過程的創(chuàng)建
3.2存儲(chǔ)過錯(cuò)調(diào)用測(cè)試
3.3結(jié)果驗(yàn)證查詢
從查詢結(jié)果可以看出,580002和580005兩個(gè)學(xué)校的學(xué)生考號(hào)均已生成,被分配到考場(chǎng)2013580002的不同考室中.
綜上所述,在S q l S erver中,能夠通過多重循環(huán)和T op關(guān)鍵字對(duì)數(shù)據(jù)表的多行數(shù)據(jù)逐一進(jìn)行操作,從而在沒有使用游標(biāo)、獨(dú)立于其他程序開發(fā)語言的前提下,實(shí)現(xiàn)了對(duì)考生考號(hào)的逐個(gè)批量生成.這種方法體現(xiàn)了數(shù)據(jù)處理的靈活性和獨(dú)立性,大大提高了數(shù)據(jù)在數(shù)據(jù)庫端處理的效率,有較大的參考和實(shí)用價(jià)值.
參考文獻(xiàn):
[1]陳印.存儲(chǔ)過程和游標(biāo)在批量生成學(xué)號(hào)中的應(yīng)用[J].福建電腦,2010,(01).
[2]胡百敬、姚巧玫.SQLServer 2005數(shù)據(jù)庫開發(fā)詳解[M].北京:電子工業(yè)出版社,2006.
責(zé)任編輯:張隆輝
中圖分類號(hào):TP311
文獻(xiàn)標(biāo)識(shí)碼:B
文章編號(hào):1672-2094(2013)04-0166-02
收稿日期:2013-05-18
作者簡(jiǎn)介:陳?。?979-),男,四川渠縣人,四川職業(yè)技術(shù)學(xué)院計(jì)算機(jī)科學(xué)系講師。研究方向:計(jì)算機(jī)軟件、數(shù)據(jù)庫開發(fā)。