何代其
摘要:在大數(shù)據(jù)肆虐的今天,數(shù)據(jù)正在迅速膨脹并變大,已經(jīng)滲透到每一個行業(yè)和業(yè)務(wù)職能領(lǐng)域,成為重要的生產(chǎn)因素,它決定著企業(yè)的未來發(fā)展,雖然很多企業(yè)可能并沒有意識到數(shù)據(jù)爆炸性增長帶來問題的隱患,但是隨著時間的推移,人們將越來越多的意識到數(shù)據(jù)對企業(yè)的重要性。
關(guān)鍵詞:探討;自定義;SQL語句;應(yīng)用
信息化越好的企業(yè),對數(shù)據(jù)會越來越重視,如何從數(shù)據(jù)庫中檢索數(shù)據(jù),最常見的方法莫過于使用簡單的DELETE、INSERT、SELECT、UPDATE等標(biāo)準(zhǔn)SQL語句,要不就是技術(shù)尖端的存儲過程,但這兩種方法很有局限性。事實上介于標(biāo)準(zhǔn)SQL語句和存儲過程之間的自定義SQL語句更靈活,更方便。
一、使用標(biāo)準(zhǔn)SQL語句
標(biāo)準(zhǔn)的SQL語句使用方法很簡單,如:SelectCommand="SELECT * FROM [manger] where ID<>1" SelectCommandType="Text",由于標(biāo)準(zhǔn)的SQL語句是默認值,所以一般把SelectCommandType="Text"省略。
二、使用存儲過程
盡管存儲過程功能強大,但使用卻很簡單,比如:
SelectCommand="xytotal" SelectCommandType="StoredProcedure">
PropertyName="SelectedValue" Type="String" />
其中xytotal是存儲過程名,nf是參數(shù)。
三、使用自定義SQL語句
1.使用CAST函數(shù)構(gòu)造數(shù)據(jù)類型
在工資查詢時,可選擇起止年月,但數(shù)據(jù)庫沒有年、月數(shù)據(jù)類型,只有日期類型,一般用每月的1日表示該月,因此要用年、月和“-1”日進行構(gòu)造,即cast(@年+'-'+@月+'-1' as datetime),由此構(gòu)成Where條件。如:SelectCommand="SELECT [應(yīng)發(fā)合計],[代扣合計],[實發(fā)金額],……,[月份] FROM [simplelist] WHERE 月份>= cast(@起年+'-'+@起月+'-1' as datetime)and 月份<= cast(@止年+'-'+@止月+'-1' as datetime)"
2.使用CASE WHEN THEN ELSE END選擇字段
SQL命令中的case...when...then...else...end條件查詢不同于where,case...when...then...else...end在from前面,可以改變記錄中某字段的值,不能決定是否顯示該記錄;而where在from后面,不可以改變記錄中某字段的值,但可以決定是否顯示該記錄。簡單地說,case是垂直篩選字段,而where是水平篩選記錄,如SelectCommand="SELECT 學(xué)院,CASE 省名 WHEN '合計' THEN 省名 ELSE 省區(qū)市 END AS 地區(qū),人數(shù) FROM totalview"。
3.使用if else 選擇SELECT語句
在就業(yè)管理系統(tǒng)中,在班級列表中,有具體班級和全部兩種情形的選項,導(dǎo)致where條件也不同,又不能用case進行構(gòu)造,可使用if else 進行選擇,具體構(gòu)成如下:SelectCommand="if(@班級<>'全部')SELECT [姓名],[就業(yè)單位],[聯(lián)系電話],…… FROM [out] WHERE([班級] = @班級)else SELECT [姓名],[就業(yè)單位],[聯(lián)系電話],…… FROM [out] WHERE(substring(畢業(yè)時間,1,4)= @畢業(yè)時間)AND([學(xué)院] = @學(xué)院)"。
這種情形多數(shù)開發(fā)人員一般采用存儲過程,并且表面上更簡單,但本質(zhì)是相同的,不過表達有所不同,因此各有各的用途。
4.構(gòu)造UPDATE語句
不同情形更新的字段不同,照說可以用存儲過程來完成,但一般情況下,UPDATE字段都好幾個字段,甚至幾十個字段,那么使用存儲過程幾乎不可能了,這時不得不用if else進行構(gòu)造,這就是幾乎沒有UPDATE的存儲過程原因。如UpdateCommand="if(@就業(yè)去向='自由職業(yè)')UPDATE [out] SET ……,[自由工作所在地] = @自由工作所在地,[自由職業(yè)內(nèi)容] = @自由職業(yè)內(nèi)容,[自由職業(yè)本人聲明] = @自由職業(yè)本人聲明 WHERE [ID] = @ID else if(@就業(yè)去向='升學(xué)')UPDATE [out] SET ……,[升學(xué)名稱] = @升學(xué)名稱 WHERE [ID] = @ID else if(@就業(yè)去向='參軍入伍')UPDATE [out] SET ……,[部隊名稱] = @部隊名稱 WHERE [ID] = @ID"。
嚴格地說,所有的存儲過程都可以用SQL語句完成,反過來,所有的SQL語句也都可以用存儲過程(視圖)來表示,那么究竟什么時候用存儲過程?什么時候用SQL語句?一般來說,簡單的查詢用SQL語句,復(fù)雜且參數(shù)少的查詢用存儲過程,參數(shù)多、較復(fù)雜的查詢只能由自定義SQL語句完成,或者說越簡單就用SQL語句,越復(fù)雜就用存儲過程,介于兩者之間就用自定義SQL語句,它們之間沒有絕對的界限。
參考文獻:
[1]姚永一,SQL Server數(shù)據(jù)庫實用教程,北京:電子工業(yè)出版社,2010.
[2]高云,SQL Server 2008數(shù)據(jù)庫技術(shù)實用教程,北京:清華大學(xué)出版社,2011
[3]何玉潔,數(shù)據(jù)庫原理與應(yīng)用(第二版),北京:機械工業(yè)出版社,2011
[4]壯志劍,數(shù)據(jù)庫原理與SQL Server,北京:高等教育出版社,2008