下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
查詢參數(shù)提高SQL語(yǔ)句的利用率有時(shí)候數(shù)據(jù)庫(kù)管理員在查詢記錄的時(shí)候,有可能只是查詢條件不同,而其他的內(nèi)容都是相同的.如人事部門可能每天都需要查詢當(dāng)天礦工、遲到、早退的員工,然后向人事經(jīng)理匯報(bào)?其實(shí)這個(gè)時(shí)候SQL語(yǔ)句的大部分都是相同的,只是查詢條件中一個(gè)時(shí)間不一樣而已.遇到這種情況時(shí),數(shù)據(jù)庫(kù)管理員需要?jiǎng)?chuàng)建可以使用多次但每次使用不同值的查詢?在SQLServer數(shù)據(jù)庫(kù)中,把這種情況叫做參數(shù)查詢?參數(shù)的查詢要利用SQL語(yǔ)句,從而提高了SQL語(yǔ)句的利用率.一、在什么時(shí)候使用參數(shù)符號(hào)在SQLServer數(shù)據(jù)庫(kù)中,其提供的語(yǔ)言支持使用參數(shù)來(lái)作為查詢條件.如果用戶需要?jiǎng)?chuàng)建每次使用不同值的查詢,則可以在查詢中使用參數(shù)?那么這個(gè)參數(shù)到底是什么呢?其實(shí)確切的說(shuō),應(yīng)該把這個(gè)參數(shù)叫做占位符?即參數(shù)是在運(yùn)行查詢時(shí)提供值的占位符?在SQLServer數(shù)據(jù)庫(kù)中,在需要顯示的內(nèi)容(Select子句)與查詢條件(Where子句)中都可以采用參數(shù),從其他地方接收輸入的值.不過(guò)大部分情況下,都只在查詢條件中使用參數(shù)?即在單個(gè)行或者組的搜索條件中使用參數(shù)作為占位符.不過(guò)并不是說(shuō)只有在搜索條件中才能夠使用參數(shù),只是說(shuō)在搜索中參數(shù)使用的比較多而已?另外,有時(shí)候在表達(dá)式中可能也會(huì)用的比較多?如一個(gè)ERP系統(tǒng)中,可能會(huì)有一定的價(jià)格折扣,如5%的折扣.那么在應(yīng)用程序設(shè)計(jì)的時(shí)候,就需要把這個(gè)折扣率從前臺(tái)傳遞到后臺(tái)的SQL語(yǔ)句中.然后數(shù)據(jù)庫(kù)系統(tǒng)根據(jù)這個(gè)折扣率把計(jì)算后的架構(gòu)回傳給前臺(tái)的客戶端?在這個(gè)過(guò)程中,如果能夠采用參數(shù)來(lái)實(shí)現(xiàn)的話,就可以提高SQL語(yǔ)句的利用率.不用每次使用不同的折扣率,而采用不同的SQL語(yǔ)句.所以說(shuō),參數(shù)在SQLServer中的應(yīng)用范圍是非常廣泛的.通常情況下,在SQL語(yǔ)句的任何部分都可以采用參數(shù)來(lái)接受外部傳入的值,從而避免每次參數(shù)不同而調(diào)整SQL語(yǔ)句的情況.二、未命名參數(shù)與命名參數(shù)在SQLServer中,參數(shù)可以分為兩種,即未命名參數(shù)與命名參數(shù).通常情況下,如果SQL語(yǔ)句中只需要一個(gè)參數(shù)的話,那么可以采用未命名參數(shù).如需要查詢某個(gè)員工上班到現(xiàn)在的全部出勤信息?此時(shí)就只需要用到員工編號(hào)這個(gè)參數(shù)即可.此時(shí)可以采用未命名的參數(shù).不過(guò)有的時(shí)候可能查詢時(shí)需要不止一個(gè)參數(shù).如現(xiàn)在需要查詢某個(gè)員工在4月份的出勤情況.此時(shí)就需要兩個(gè)參數(shù),分別為員工編號(hào)、月份.或者需要三個(gè)參數(shù),分別為員工編號(hào)、開(kāi)始日期、結(jié)束日期等等.總之要多于一個(gè)參數(shù).此時(shí)就需要使用命名參數(shù).因?yàn)槿绻褂梦疵麉?shù)的話,則數(shù)據(jù)庫(kù)并不知道要把哪個(gè)參數(shù)對(duì)應(yīng)到哪個(gè)地方.所以說(shuō),如果要在查詢中使用多個(gè)參數(shù),那么此時(shí)命名參數(shù)就會(huì)非常有用.未命名的參數(shù)使用很簡(jiǎn)單.不需要像應(yīng)用程序開(kāi)發(fā)那樣,先聲明再使用.而是在需要的地方直接輸入?符號(hào)即可.如需要把某個(gè)員工最為參數(shù)的話,則可以使用ad_user_id=?即可.這里需要注意一點(diǎn),這里不需要加入單引號(hào).因?yàn)檎G闆r下,如果輸入的條件是字符型的話,則必須利用單引號(hào)括起來(lái).如果輸入的條件是數(shù)字的話,則不用單引號(hào).但是如果采用的是參數(shù)的話,無(wú)論最終輸入的數(shù)據(jù)類型是什么,這里都不用單引號(hào).否則的話,就不能夠達(dá)到預(yù)期的效果.如果采用的是命名參數(shù)的話,也不需要事先定義.只需要在使用的時(shí)候定義參數(shù)名字即可.這個(gè)定義的過(guò)程也很簡(jiǎn)單.如現(xiàn)在用戶需要按員工編號(hào)與日期來(lái)查詢某個(gè)員工的出勤記錄.此時(shí)只需要使用AD_USER_ID=%USER_ID%ANDUSERDATE=%USERSDATE%.從這里可以看出,未命名參數(shù)與命名參數(shù)使用的參數(shù)符號(hào)是不同的.在命名參數(shù)是,需要中參數(shù)名字的前后使用%號(hào),表示這是一個(gè)命名參數(shù).不過(guò)這個(gè)前綴與后綴的字符數(shù)據(jù)庫(kù)管理員可以根據(jù)自己的需要來(lái)進(jìn)行自定義.不過(guò)需要注意的就是,在創(chuàng)建命名參數(shù)查詢之前,必須要先預(yù)先定義后這個(gè)參數(shù)的前綴與后綴符號(hào).三、在循環(huán)中使用參數(shù)標(biāo)記參數(shù)不僅可以用在Select查詢語(yǔ)句中,有時(shí)候在一些循環(huán)語(yǔ)句中也可以使用.如現(xiàn)在有一個(gè)股票分析系統(tǒng).用戶自定義了10只關(guān)注的股票.現(xiàn)在這個(gè)系統(tǒng)要每隔30秒就從數(shù)據(jù)庫(kù)系統(tǒng)中讀取這十只股票的最新價(jià)格.此時(shí)該如何實(shí)現(xiàn)呢?當(dāng)然用戶也可以在查詢條件語(yǔ)句中通過(guò)輸入10個(gè)股票的代碼來(lái)實(shí)現(xiàn)查詢.但是這個(gè)做非常的麻煩.而且由于用戶關(guān)注的股票數(shù)量不確定,所以采用多個(gè)命名參數(shù)來(lái)實(shí)現(xiàn)的話,也不現(xiàn)實(shí)?雖然SQL語(yǔ)句可以接受多個(gè)參數(shù),但是其參數(shù)的數(shù)量必須是固定的?像現(xiàn)在這種不固定的參數(shù),SQL語(yǔ)句也很難實(shí)現(xiàn).針對(duì)這種情況,只有通過(guò)循環(huán)語(yǔ)句來(lái)實(shí)現(xiàn)?即在SQL語(yǔ)句中只使用一個(gè)參數(shù),即股票代碼這個(gè)參數(shù).然后通過(guò)循環(huán)語(yǔ)句把用戶選定的股票代碼一個(gè)一個(gè)的傳遞進(jìn)去.傳進(jìn)去第一個(gè)后,數(shù)據(jù)庫(kù)返回結(jié)果;然后再傳進(jìn)去第二個(gè),再返回結(jié)果.知道最后一個(gè)參數(shù)傳遞完畢.通常情況下,可以把這個(gè)循環(huán)語(yǔ)句做成一個(gè)存儲(chǔ)過(guò)程或者函數(shù).然后通過(guò)參數(shù)的個(gè)數(shù)來(lái)控制循環(huán)的次數(shù).這種解決方案可以很好的實(shí)現(xiàn)因?yàn)閰?shù)個(gè)數(shù)不確定而難以處理的情況.當(dāng)然,這其中仍然參數(shù)在起著主導(dǎo)作用.四、在SET語(yǔ)句中使用參數(shù)企業(yè)有時(shí)候可能遇到這種需求,即把滿足某個(gè)條件的記錄中,某些字段利用某個(gè)參數(shù)值來(lái)進(jìn)行代替.如企業(yè)可能經(jīng)濟(jì)效益好,要把提升員工的工資.其中普通員工提升10%,管理層員工提升15%.此時(shí)就需要用到SQL語(yǔ)句中的Update語(yǔ)句.這更新的時(shí)候,需要用到兩個(gè)參數(shù).一個(gè)是員工的類別,即是屬于普通員工又或者是屬于管理層員工;第二個(gè)參數(shù)是提升的百分比,是提升10%還是15%.其實(shí)在實(shí)際工作中,有很多地方需要用到類似地參數(shù)與語(yǔ)句?如在ERP系統(tǒng)中,有時(shí)候需要根據(jù)產(chǎn)品的類別或者供應(yīng)商來(lái)更新價(jià)格;如有時(shí)候需要把好幾年都沒(méi)有用過(guò)的產(chǎn)品信息設(shè)置為不活躍;有時(shí)候需要把訂單尾數(shù)少于5的采購(gòu)訂單指定為結(jié)束等等?所有,數(shù)據(jù)庫(kù)管理員必須要掌握這種參數(shù)與Upadate語(yǔ)句結(jié)合使用的案例.這有助于數(shù)據(jù)庫(kù)管理員在日后的工作中,利用這些語(yǔ)句順利完成任務(wù).五、使用參數(shù)時(shí)的注意事項(xiàng)從上面分析中可以看出,使用參數(shù)與不使用參數(shù)有一個(gè)很大的區(qū)別.如果直接在SQL語(yǔ)句中輸入查詢條件(不通過(guò)參數(shù)來(lái)實(shí)現(xiàn)),那么數(shù)據(jù)庫(kù)在編譯SQL語(yǔ)句的時(shí)候,會(huì)進(jìn)行語(yǔ)法方面的檢查.如果輸入的條件有錯(cuò)誤,或者其數(shù)據(jù)類型跟需要比較字段的數(shù)據(jù)類型不一致,或者在SET語(yǔ)句中需要更新的值與數(shù)據(jù)庫(kù)字段的數(shù)據(jù)類型不一致的話,那么數(shù)據(jù)庫(kù)就會(huì)提示錯(cuò)誤信息.也就是說(shuō),在執(zhí)行語(yǔ)句之前,就對(duì)了一道保障.但是如果使用參數(shù)來(lái)傳遞數(shù)據(jù)的話,有一個(gè)不好的信息.即在SQL語(yǔ)句執(zhí)行時(shí),傳遞的參數(shù)是否符合要求呢?此時(shí)對(duì)數(shù)據(jù)庫(kù)來(lái)說(shuō),只有在SQL語(yǔ)句執(zhí)行的時(shí)候才能夠知道.為了避免這種情況,最好能夠在應(yīng)用程序那邊進(jìn)行相關(guān)的判斷與限制.如需要查詢今天是否有員工曠工、遲到、早退等等情況.一共需要兩個(gè)參數(shù),一是時(shí)間,二是事由(可以多選).但是這兩個(gè)數(shù)據(jù)又都是比較特別的.如時(shí)間是一個(gè)日期類型的數(shù)據(jù).如果在應(yīng)用程序客戶端用戶不小心輸入了一個(gè)不是日期類型的數(shù)據(jù),或者把2009年5月20日寫成了2009年5月40日.這很可能是筆誤,但這畢竟是錯(cuò)誤,數(shù)據(jù)庫(kù)無(wú)法識(shí)別類似的錯(cuò)誤.為此最好能夠在應(yīng)用程序客戶端處就進(jìn)行檢查.如果發(fā)現(xiàn)這個(gè)輸入的日期非法的話,就在客戶端把這個(gè)參數(shù)傳遞給數(shù)據(jù)庫(kù)之前就提示參數(shù)輸入錯(cuò)誤.另外事由這個(gè)字段應(yīng)該是跟列表類似的數(shù)據(jù)類型.在數(shù)據(jù)庫(kù)中只保存著對(duì)應(yīng)的幾個(gè)編碼.也就是說(shuō),其輸入的是有一定含義的序列.對(duì)于這種數(shù)據(jù),在客戶端上也需要進(jìn)行控制.其實(shí)控制起來(lái)也很簡(jiǎn)單.即不要讓用戶自己手工輸入,而是通過(guò)復(fù)選框的形式來(lái)用戶來(lái)進(jìn)行選擇.然后應(yīng)用程序直接根據(jù)選擇的內(nèi)容翻譯成對(duì)應(yīng)的參數(shù)然后傳遞給數(shù)據(jù)庫(kù)中的SQL語(yǔ)句.顯然在應(yīng)用程序客戶端層面可以對(duì)參數(shù)的合法性進(jìn)行控制,最大限度的保障輸入的數(shù)據(jù)符合
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年財(cái)產(chǎn)分配協(xié)議書:離婚股權(quán)分割條款
- 2024版塔吊設(shè)備交易協(xié)議模板版B版
- 2024版居間合同最高收費(fèi)標(biāo)準(zhǔn)
- 2024版工程款按進(jìn)度付款的合同
- 2024深圳商鋪?zhàn)赓U合同范本:商鋪?zhàn)赓U合同的解除及賠償責(zé)任
- 2024版大客戶新能源汽車購(gòu)買合同3篇
- 2024年度人力資源咨詢與勞動(dòng)合同編制服務(wù)合同3篇
- 2024年鏟車租借標(biāo)準(zhǔn)協(xié)議詳盡模板版
- 2024版專業(yè)大額融資中介協(xié)議樣本一
- 2023-2024年執(zhí)業(yè)醫(yī)師資格證之臨床助理醫(yī)師題庫(kù)及答案
- 2024時(shí)事政治考試100題及參考答案
- 醫(yī)療廢物轉(zhuǎn)移實(shí)施方案
- 工程師個(gè)人年終總結(jié)
- 【學(xué)易金卷】2023-2024學(xué)年四年級(jí)數(shù)學(xué)上冊(cè)期末全真模擬提高卷(三)(A4版)(北師大版)
- GB 17353-2024摩托車和輕便摩托車防盜裝置
- 學(xué)校膳食管理委員會(huì)工作制度和職責(zé)
- 房租收條格式(3篇)
- 期末試卷(試題)2024-2025學(xué)年培智生活語(yǔ)文二年級(jí)上冊(cè)
- 2024秋期國(guó)家開(kāi)放大學(xué)本科《中國(guó)當(dāng)代文學(xué)專題》一平臺(tái)在線形考(形考任務(wù)一至六)試題及答案
- 2024伊利在線測(cè)評(píng)題
- 紅色簡(jiǎn)約中國(guó)英雄人物李大釗課件
評(píng)論
0/150
提交評(píng)論