摘要:該文闡述了存儲過程在科研管理系統(tǒng)中的應(yīng)用,簡單介紹了科研管理系統(tǒng)的功能模塊、存儲過程的優(yōu)點、存儲過程的創(chuàng)建。
關(guān)鍵詞:數(shù)據(jù)庫;存儲過程;科研管理系統(tǒng)
中圖分類號:TP311文獻標(biāo)識碼:A文章編號:1009-3044(2012)02-0464-03
Discussion on the Stored Procedure in the Application of Scientific Research Management System
LI Qiong-han
(Hainan College of Software Technology ,Qionghai 571400, China)
Abstract: This paper expounds the stored procedure in the scientific research management system application, introduces the scientific re? search management system function module, storage process advantages and create procedure.
Key words: database; storage process; scientific research management system
1概述
在各種系統(tǒng)開發(fā)中,使用存儲過程是一個良好的習(xí)慣,不僅可以帶來臨時表、函數(shù)、游標(biāo)等特性,而且調(diào)試、升級、維護都變得方便。在存儲過程中能夠把數(shù)據(jù)經(jīng)過處理再返回,這樣能夠?qū)?shù)據(jù)提供更多的分析和控制。。存儲過程是數(shù)據(jù)庫中的一個重要對象,任何一個設(shè)計良好的數(shù)據(jù)庫應(yīng)用程序都應(yīng)該用到存儲過程。
2存儲過程的優(yōu)點
2.1開發(fā)效率高
端代碼量很少,基本上是將客戶端的數(shù)據(jù),原原本本傳入到存儲過程。所有的計算都在存儲過程里完成,開發(fā)調(diào)試方便。存儲過程只在創(chuàng)造時進行編譯,以后每次執(zhí)行存儲過程都不需再重新編譯,而一般SQL語句每執(zhí)行一次就編譯一次,所以使用存儲過程可提高數(shù)據(jù)庫執(zhí)行速度。
2.2維護方便
一般后臺有什么錯誤,都在存儲過程里,修改完了不需要重啟服務(wù),基本不會干擾客戶運營.當(dāng)對數(shù)據(jù)庫進行復(fù)雜操作時(如對多個表進行Update,Insert,Query,Delete時),可將此復(fù)雜操作用存儲過程封裝起來與數(shù)據(jù)庫提供的事務(wù)處理結(jié)合一起使用。
2.3安全性高
一個用戶可能沒有執(zhí)行存儲過程中語句的權(quán)限,但是可以被賦予執(zhí)行存儲過程的權(quán)限,這就增強了數(shù)據(jù)庫的安全性。另外,可以通過存儲過程來隱藏用戶可用的數(shù)據(jù)和數(shù)據(jù)操作中涉及的商業(yè)規(guī)則,提高了數(shù)據(jù)安全級別。相對于直接使用SQL語句,在應(yīng)用程序中直接調(diào)用存儲過程有以下好處:
2.3.1減少網(wǎng)絡(luò)通信量
調(diào)用一個行數(shù)不多的存儲過程與直接調(diào)用SQL語句的網(wǎng)絡(luò)通信量可能不會有很大的差別,可是如果存儲過程包含上百行SQL語句,那么其性能絕對比一條一條的調(diào)用SQL語句要高得多。
2.3.2執(zhí)行速度更快
有兩個原因:首先,在存儲過程創(chuàng)建的時候,數(shù)據(jù)庫已經(jīng)對其進行了一次解析和優(yōu)化。其次,存儲過程一旦執(zhí)行,在內(nèi)存中就會保留一份這個存儲過程,這樣下次再執(zhí)行同樣的存儲過程時,可以從內(nèi)存中直接調(diào)用。
2.3.3更強的適應(yīng)性
由于存儲過程對數(shù)據(jù)庫的訪問是通過存儲過程來進行的,因此數(shù)據(jù)庫開發(fā)人員可以在不改動存儲過程接口的情況下對數(shù)據(jù)庫進行任何改動,而這些改動不會對應(yīng)用程序造成影響。
2.3.4分布式工作
應(yīng)用程序和數(shù)據(jù)庫的編碼工作可以分別獨立進行,而不會相互壓制。
科研項目申報模塊:教師個人登錄后,可上傳項目申報書,查看項目審批狀態(tài),修改個人登錄密碼,申報者可以查看是否通過。
科研數(shù)據(jù)錄入模塊:教師個人科研信息的錄入,其中科研信息主要包括論文.項目,獲獎、教材專著和課題等。
科研數(shù)據(jù)管理模塊:教師個人科研信息的修改、刪除。
科研項目審核模塊::管理員對教師申報的科研項目進行審核、審批。
查詢、統(tǒng)計和報表打印模塊:對各種科研信息進行統(tǒng)計和報表的打印,包括對教師個人發(fā)表的科研論文、著作、獲獎、本年度批準的科研項目情況統(tǒng)計和打印。
角色管理:主要實現(xiàn)系統(tǒng)的安全管理。包括添加用戶,用戶管理等.以實現(xiàn)對用戶和用戶角色的管理。角色管理是專為具有系統(tǒng)管理員權(quán)限的用戶設(shè)計的。系統(tǒng)在數(shù)據(jù)庫中首先設(shè)置一個或多個具有管理員權(quán)限的用戶,通過用戶登錄來判斷用戶的權(quán)限,若為管理員則可進入該模塊,實現(xiàn)對整個科研數(shù)據(jù)庫的維護與管理(包括增加、修改、刪除等多項操作)。
基本設(shè)置模塊:主要包括年度、科研類別、研究類別、獲獎類別、部門等一些基本信息的添加。
圖1
圖2
4創(chuàng)建存儲過程
下面以論文表為例,介紹存儲過程在科研管理系統(tǒng)中的應(yīng)用。
圖2所示是論文表的字段構(gòu)成。
--論文存儲過程(包含插入論文與修改論文)
createproc [dbo].[proc_lunwen]
@lwidint integer=null, --論文id
@lwname varchar(150),--論文名稱
@dywriter varchar(20),--第一作者
@qtwriter varchar(200),--其他作者
@lwjibie varchar(20),--級別
@xkkind varchar(30),--學(xué)科分類
@fbtime datetime ,--發(fā)表時間
@wnumber varchar(20),--字數(shù)
@kwIssn varchar(100),--刊物編號
@kwcn varchar(100),--國內(nèi)編號
@kwname varchar(100),--刊物名稱
@issue varchar(100),--期號(發(fā)表時間期數(shù))
@kyzheid int,
@zhubdw varchar(100),--主辦單位
@beizhu varchar(500)--備注
as
if isnull(@lwidint,0)=0 --插入記錄
begin
insert lunwen(lwname,dywriter,qtwriter,lwjibie,xkkind,fbtime,wnumber,kwIssn,kwcn,kwname,issue,kyzheid,zhubdw,beizhu) values(@lw? name,@dywriter,@qtwriter,@lwjibie,@xkkind,@fbtime,@wnumber,@kwIssn,@kwcn,@kwname,@issue,@kyzheid,@zhubdw,@beizhu)
end
else--修改記錄
begin
update lunwen
set lwname=@lwname,
dywriter=@dywriter,
qtwriter=@qtwriter,
lwjibie=@lwjibie,
xkkind=@xkkind,
fbtime=@fbtime,
wnumber=@wnumber,
kwIssn=@kwIssn,
kwcn=@kwcn,
kwname=@kwname,
issue=@issue,
zhubdw=@zhubdw,
beizhu=@beizhu
where lwidint=@lwidint
end
--統(tǒng)計論文存儲過程
create proc [dbo].[tjlw] @dt1 varchar(20) ,@dt2 varchar(20)
as
create table #lw(
lwid int identity(1,1),
dywriter varchar(20) null,
qtwriter varchar(200) null,
fbtime datetime null,
lwname varchar(150) null,
kwname varchar(150) null,
kwissn varchar(100) null,
kwcn varchar(100) null,
issue varchar(100) null,
kyzheid int null,
beizhu varchar(500) null
)
create table #kyzhe(
kyid int identity(1,1),
kyzheid int null,
bmname varchar(20) null
)
create table #lwtj_temp(
lw_tid int identity(1,1),
dywriter varchar(20) null,
qtwriter varchar(200) null,
fbtime datetime null,
lwname varchar(150) null,
kwname varchar(150) null,
kwissn varchar(100) null,
kwcn varchar(100) null,
issue varchar(100) null,
kyzheid int null,
bmname varchar(20) null,
beizhu varchar(500) null
)
create table #lwtj(
id int identity(1,1),
writer varchar(200) null,--dywriter、qtwriter姓名
lwname varchar(150) null,--成果名稱
fbtime datetime null,
chenggly varchar(200) null, --kwname、kwissn、kwcn成果來源
issue varchar(100) null,--發(fā)表時間
kyzheid int null,
bmname varchar(20) null,--系部
beizhu varchar(500) null
)
insert into #lw select dywriter ,qtwriter,fbtime,lwname,kwname,kwissn ,kwcn ,issue ,kyzheid ,beizhu from lunwen
insert into #kyzhe select kyzheid,bmname from kyzhe
declare @row int,
@i int,
@dywriter varchar(20),@qtwriter varchar(200),@fbtime datetime,@lwname varchar(150),@kwname varchar(100),@kwissn varchar(100),@kwcn varchar(100),@writer varchar(200),@chenggly varchar(200),
@issue varchar(100),@kyzheid int,@bmname varchar(20),@beizhu varchar(500)(下轉(zhuǎn)第468頁)
(上接第466頁)
set @i=1
insert into #lwtj_temp select dywriter,qtwriter,fbtime,lwname,kwname,kwissn,kwcn,issue,#lw.kyzheid,bmname,beizhu from #lw join #ky? zhe on #lw.kyzheid=#kyzhe.kyzheid
set @row=@@rowcount
while @i<=@row
begin
--print i=+convert(varchar,@i)
select@dywriter=dywriter,@qtwriter=qtwriter,@fbtime=fbtime,@lwname=lwname,@kwname=kwname,@kwissn=kwissn,@kwcn=kwcn,@issue=issue,@kyzheid=kyzheid,@bmname=bmname,@beizhu=beizhu from #lwtj_temp where lw_tid=@i
set @writer=@dywriter+、+@qtwriter
set @chenggly=@kwname+、+@kwissn+、+@kwcn
insert into #lwtj select @writer,@lwname,@fbtime,@chenggly,@issue,@kyzheid,@bmname,@beizhu
set @i=@i+1
end
select * from #lwtj where fbtime>=@dt1 and fbtime<=@dt2
創(chuàng)建以上存儲過程后,保存之。保存完畢,與該存儲過程相對應(yīng)的節(jié)點就會出現(xiàn)在服務(wù)器資源管理器中。同時請注意代碼編輯窗口中的CREATE關(guān)鍵字變?yōu)锳LTER關(guān)鍵字了,該關(guān)鍵字是用于更改任何現(xiàn)有的存儲過程的。要運行上述存儲過程,只要點擊其節(jié)點并在右鍵彈出菜單中選擇“運行存儲過程”。
5結(jié)束語
設(shè)計具有高可靠性、高響應(yīng)速度的軟件系統(tǒng)是一件很難的事情。從數(shù)據(jù)庫設(shè)計、系統(tǒng)的架構(gòu)設(shè)計到存儲過程設(shè)計和代碼的編寫,每個環(huán)節(jié)都息息相關(guān)。在設(shè)計過程中充分地考慮存儲過程的應(yīng)用,會給軟件設(shè)計帶來極大的便利,從而大大提高設(shè)計效率。
參考文獻:
[1]李瓊漢,周恩.基于ASP.NET AJAX的高??蒲泄芾硐到y(tǒng)的設(shè)計與實現(xiàn)[J].電腦知識與技術(shù),2011,7(2).
[2]【美】Sanjeev Rohilla. ADO.NET專業(yè)項目實例開發(fā)[M].陳君,王寶良,譯.北京:中國水利水電出版社2003.