讓你提前認識軟體開發(35):如何修改SQL指令碼以完成需求?,軟體開發sql
第2部分 資料庫SQL語言
如何修改SQL指令碼以完成需求?
SQL指令碼的修改和C語言代碼的修改流程是一樣的,都要遵循以下步驟:
第一步,閱讀需求,弄清楚自己要完成什麼功能。
第二步,對照需求閱讀原代碼,找到本次要修改的內容的一般位置。
第三步,對代碼進行修改(包括:添加、刪除和修改等),將本次的功能添加上去。
第四步,對修改後的代碼進行測試,驗證新增功能是否滿足需求。
本文以一個實際的需求完成過程為例,詳細說明如何對SQL指令碼進行修改。
1. 需求描述
在某軟體版本中,需要完成如下需求:
(1) 在原有媒體類型的基礎上新增一種媒體類型4,其功能屬性編號為4。
(2) 要查詢信箱中儲存的新增媒體類型的使用者總數,並判斷是否達到最大儲存限額。
(3) 如果最大儲存限額為1000,則表明不限制信箱所儲存的新增的媒體類型的使用者總數,即不用判斷信箱是否滿。
(4) 如果最大儲存限額為0,則表明信箱不允許接收新增的媒體類型的郵件。
2. 尋找SQL指令碼的修改位置
通過對需求的理解和原指令碼的閱讀,發現需要在以下代碼位置處進行修改(指令碼是基於Sybase資料庫實現):
……
……
if (@mailtype=1)
begin
select @functionid = 1
end
else if (@mailtype=2)
begin
select @functionid = 1
end
else if(@mailtype=3)
begin
select @functionid = 3
end
select @tmpstr = funvalue from tb_cosprofile where cosinid = @mboxserver and functionid = @functionid
if (@mailcnt < @maxcnt)
begin
select @isfull = 0
end
else
begin
select @isfull = 1
end
……
……
3. 一步一步完成需求
找到了代碼的修改位置之後,下面就要來實現需求了。
第一步:在原有媒體類型的基礎上新增一種媒體類型4,其功能屬性編號為4。
修改之後的代碼如下所示:
……
……
if (@mailtype=1)
begin
select @functionid = 1
end
else if (@mailtype=2)
begin
select @functionid = 1
end
else if(@mailtype=3)
begin
select @functionid = 3
end
-- zzx add 20140709 begin
else if(@mailtype=4)
begin
select @functionid = 4
end
-- zzx add 20140709 end
……
……
第二步:要查詢信箱中儲存的新增媒體類型的使用者總數,並判斷是否達到最大儲存限額。
對照原代碼,該需求可採用之前的實現,本次不做修改。
第三步:如果最大儲存限額為1000,則表明不限制信箱所儲存的新增的媒體類型的使用者總數,即不用判斷信箱是否滿。如果最大儲存限額為0,則表明信箱不允許接收新增的媒體類型的郵件。
在修改代碼的時候,我們有一個原則,那就是盡量不要改變之前的流程。因此,為了完成該需求,考慮採用“if…else”語句,對本次新增的媒體類型進行單獨處理。
修改之後的代碼如下所示:
……
……
-- zzx add 20140709 begin
if (@functionid = 4)
begin
if (@maxcnt = 0)
begin
select @isfull = 2 -- 對於這種情況,要返回一個特殊的值
end
else if (@maxcnt = 1000)
begin
select @isfull = 0
end
else
begin
if (@mailcnt < @maxcnt)
begin
select @isfull = 0
end
else
begin
select @isfull = 1
end
end
end
-- zzx add 20140709 end
else
begin
if (@mailcnt < @maxcnt)
begin
select @isfull = 0
end
else
begin
select @isfull = 1
end
end
……
……
經過以上三步的修改之後,最後的指令碼如下所示:
……
……
if (@mailtype=1)
begin
select @functionid = 1
end
else if (@mailtype=2)
begin
select @functionid = 1
end
else if(@mailtype=3)
begin
select @functionid = 3
end
-- zzx add 20140709 begin
else if(@mailtype=4)
begin
select @functionid = 4
end
-- zzx add 20140709 end
select @tmpstr = funvalue from tb_cosprofile where cosinid = @mboxserver and functionid = @functionid
-- zzx add 20140709 begin
if (@functionid = 4)
begin
if (@maxcnt = 0)
begin
select @isfull = 2 -- 對於這種情況,要返回一個特殊的值
end
else if (@maxcnt = 1000)
begin
select @isfull = 0
end
else
begin
if (@mailcnt < @maxcnt)
begin
select @isfull = 0
end
else
begin
select @isfull = 1
end
end
end
-- zzx add 20140709 end
else
begin
if (@mailcnt < @maxcnt)
begin
select @isfull = 0
end
else
begin
select @isfull = 1
end
end
……
……
4. 對修改之後的代碼進行測試
代碼修改完後,我們還要進行充分的自測之後才能提交版本。
對於SQL指令碼的測試,需要構造一些資料,待指令碼執行完之後,查看是否按照需求要求執行了特定的流程。
總的說來,在修改SQL指令碼的過程中,我們要注意以下事項:
(1) 在動手修改代碼之前,一定要將需求理解到位,弄清楚要實現的功能到底是什麼。
(2) 在修改代碼的過程中,要嚴格參照編程規範執行。對於改動的代碼,一定要添加註釋。
(3) 代碼的修改要遵循最小改動原則,即我們在盡量不改變原程式流程的前提下來實現新的功能。
(4) 在代碼修改完之後,一定要進行充分的自測。這個與C語言程式的測試是一樣的道理。
“實踐出真知”,只有通過不斷的實踐,我們才能夠提高自己的編程能力,才能夠掌握需求實現的正確而快速的方法。
(本人微博:http://weibo.com/zhouzxi?topnav=1&wvr=5,號:245924426,歡迎關注!)
怎更改sql指令碼?
這個網站的程式如果不是你寫的,那就不是你的錯,也不需要你去修改指令碼,你也改不了指令碼。
這樣怎更改資料庫
沒有主鍵?那也起碼有一個欄位是唯一值的吧,否則你修改的那條資料,怎麼知道是對應資料庫裡面的那條呢?