查詢參數(shù)提高SQL語句的利用率_第1頁
查詢參數(shù)提高SQL語句的利用率_第2頁
查詢參數(shù)提高SQL語句的利用率_第3頁
全文預覽已結(jié)束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

查詢參數(shù)提高SQL語句的利用率有時候數(shù)據(jù)庫管理員在查詢記錄的時候,有可能只是查詢條件不同,而其他的內(nèi)容都是相同的.如人事部門可能每天都需要查詢當天礦工、遲到、早退的員工,然后向人事經(jīng)理匯報?其實這個時候SQL語句的大部分都是相同的,只是查詢條件中一個時間不一樣而已.遇到這種情況時,數(shù)據(jù)庫管理員需要創(chuàng)建可以使用多次但每次使用不同值的查詢?在SQLServer數(shù)據(jù)庫中,把這種情況叫做參數(shù)查詢?參數(shù)的查詢要利用SQL語句,從而提高了SQL語句的利用率.一、在什么時候使用參數(shù)符號在SQLServer數(shù)據(jù)庫中,其提供的語言支持使用參數(shù)來作為查詢條件.如果用戶需要創(chuàng)建每次使用不同值的查詢,則可以在查詢中使用參數(shù)?那么這個參數(shù)到底是什么呢?其實確切的說,應該把這個參數(shù)叫做占位符?即參數(shù)是在運行查詢時提供值的占位符?在SQLServer數(shù)據(jù)庫中,在需要顯示的內(nèi)容(Select子句)與查詢條件(Where子句)中都可以采用參數(shù),從其他地方接收輸入的值.不過大部分情況下,都只在查詢條件中使用參數(shù)?即在單個行或者組的搜索條件中使用參數(shù)作為占位符.不過并不是說只有在搜索條件中才能夠使用參數(shù),只是說在搜索中參數(shù)使用的比較多而已?另外,有時候在表達式中可能也會用的比較多?如一個ERP系統(tǒng)中,可能會有一定的價格折扣,如5%的折扣.那么在應用程序設計的時候,就需要把這個折扣率從前臺傳遞到后臺的SQL語句中.然后數(shù)據(jù)庫系統(tǒng)根據(jù)這個折扣率把計算后的架構回傳給前臺的客戶端?在這個過程中,如果能夠采用參數(shù)來實現(xiàn)的話,就可以提高SQL語句的利用率.不用每次使用不同的折扣率,而采用不同的SQL語句.所以說,參數(shù)在SQLServer中的應用范圍是非常廣泛的.通常情況下,在SQL語句的任何部分都可以采用參數(shù)來接受外部傳入的值,從而避免每次參數(shù)不同而調(diào)整SQL語句的情況.二、未命名參數(shù)與命名參數(shù)在SQLServer中,參數(shù)可以分為兩種,即未命名參數(shù)與命名參數(shù).通常情況下,如果SQL語句中只需要一個參數(shù)的話,那么可以采用未命名參數(shù).如需要查詢某個員工上班到現(xiàn)在的全部出勤信息?此時就只需要用到員工編號這個參數(shù)即可.此時可以采用未命名的參數(shù).不過有的時候可能查詢時需要不止一個參數(shù).如現(xiàn)在需要查詢某個員工在4月份的出勤情況.此時就需要兩個參數(shù),分別為員工編號、月份.或者需要三個參數(shù),分別為員工編號、開始日期、結(jié)束日期等等.總之要多于一個參數(shù).此時就需要使用命名參數(shù).因為如果使用未命名參數(shù)的話,則數(shù)據(jù)庫并不知道要把哪個參數(shù)對應到哪個地方.所以說,如果要在查詢中使用多個參數(shù),那么此時命名參數(shù)就會非常有用.未命名的參數(shù)使用很簡單.不需要像應用程序開發(fā)那樣,先聲明再使用.而是在需要的地方直接輸入?符號即可.如需要把某個員工最為參數(shù)的話,則可以使用ad_user_id=?即可.這里需要注意一點,這里不需要加入單引號.因為正常情況下,如果輸入的條件是字符型的話,則必須利用單引號括起來.如果輸入的條件是數(shù)字的話,則不用單引號.但是如果采用的是參數(shù)的話,無論最終輸入的數(shù)據(jù)類型是什么,這里都不用單引號.否則的話,就不能夠達到預期的效果.如果采用的是命名參數(shù)的話,也不需要事先定義.只需要在使用的時候定義參數(shù)名字即可.這個定義的過程也很簡單.如現(xiàn)在用戶需要按員工編號與日期來查詢某個員工的出勤記錄.此時只需要使用AD_USER_ID=%USER_ID%ANDUSERDATE=%USERSDATE%.從這里可以看出,未命名參數(shù)與命名參數(shù)使用的參數(shù)符號是不同的.在命名參數(shù)是,需要中參數(shù)名字的前后使用%號,表示這是一個命名參數(shù).不過這個前綴與后綴的字符數(shù)據(jù)庫管理員可以根據(jù)自己的需要來進行自定義.不過需要注意的就是,在創(chuàng)建命名參數(shù)查詢之前,必須要先預先定義后這個參數(shù)的前綴與后綴符號.三、在循環(huán)中使用參數(shù)標記參數(shù)不僅可以用在Select查詢語句中,有時候在一些循環(huán)語句中也可以使用.如現(xiàn)在有一個股票分析系統(tǒng).用戶自定義了10只關注的股票.現(xiàn)在這個系統(tǒng)要每隔30秒就從數(shù)據(jù)庫系統(tǒng)中讀取這十只股票的最新價格.此時該如何實現(xiàn)呢?當然用戶也可以在查詢條件語句中通過輸入10個股票的代碼來實現(xiàn)查詢.但是這個做非常的麻煩.而且由于用戶關注的股票數(shù)量不確定,所以采用多個命名參數(shù)來實現(xiàn)的話,也不現(xiàn)實?雖然SQL語句可以接受多個參數(shù),但是其參數(shù)的數(shù)量必須是固定的?像現(xiàn)在這種不固定的參數(shù),SQL語句也很難實現(xiàn).針對這種情況,只有通過循環(huán)語句來實現(xiàn)?即在SQL語句中只使用一個參數(shù),即股票代碼這個參數(shù).然后通過循環(huán)語句把用戶選定的股票代碼一個一個的傳遞進去.傳進去第一個后,數(shù)據(jù)庫返回結(jié)果;然后再傳進去第二個,再返回結(jié)果.知道最后一個參數(shù)傳遞完畢.通常情況下,可以把這個循環(huán)語句做成一個存儲過程或者函數(shù).然后通過參數(shù)的個數(shù)來控制循環(huán)的次數(shù).這種解決方案可以很好的實現(xiàn)因為參數(shù)個數(shù)不確定而難以處理的情況.當然,這其中仍然參數(shù)在起著主導作用.四、在SET語句中使用參數(shù)企業(yè)有時候可能遇到這種需求,即把滿足某個條件的記錄中,某些字段利用某個參數(shù)值來進行代替.如企業(yè)可能經(jīng)濟效益好,要把提升員工的工資.其中普通員工提升10%,管理層員工提升15%.此時就需要用到SQL語句中的Update語句.這更新的時候,需要用到兩個參數(shù).一個是員工的類別,即是屬于普通員工又或者是屬于管理層員工;第二個參數(shù)是提升的百分比,是提升10%還是15%.其實在實際工作中,有很多地方需要用到類似地參數(shù)與語句?如在ERP系統(tǒng)中,有時候需要根據(jù)產(chǎn)品的類別或者供應商來更新價格;如有時候需要把好幾年都沒有用過的產(chǎn)品信息設置為不活躍;有時候需要把訂單尾數(shù)少于5的采購訂單指定為結(jié)束等等?所有,數(shù)據(jù)庫管理員必須要掌握這種參數(shù)與Upadate語句結(jié)合使用的案例.這有助于數(shù)據(jù)庫管理員在日后的工作中,利用這些語句順利完成任務.五、使用參數(shù)時的注意事項從上面分析中可以看出,使用參數(shù)與不使用參數(shù)有一個很大的區(qū)別.如果直接在SQL語句中輸入查詢條件(不通過參數(shù)來實現(xiàn)),那么數(shù)據(jù)庫在編譯SQL語句的時候,會進行語法方面的檢查.如果輸入的條件有錯誤,或者其數(shù)據(jù)類型跟需要比較字段的數(shù)據(jù)類型不一致,或者在SET語句中需要更新的值與數(shù)據(jù)庫字段的數(shù)據(jù)類型不一致的話,那么數(shù)據(jù)庫就會提示錯誤信息.也就是說,在執(zhí)行語句之前,就對了一道保障.但是如果使用參數(shù)來傳遞數(shù)據(jù)的話,有一個不好的信息.即在SQL語句執(zhí)行時,傳遞的參數(shù)是否符合要求呢?此時對數(shù)據(jù)庫來說,只有在SQL語句執(zhí)行的時候才能夠知道.為了避免這種情況,最好能夠在應用程序那邊進行相關的判斷與限制.如需要查詢今天是否有員工曠工、遲到、早退等等情況.一共需要兩個參數(shù),一是時間,二是事由(可以多選).但是這兩個數(shù)據(jù)又都是比較特別的.如時間是一個日期類型的數(shù)據(jù).如果在應用程序客戶端用戶不小心輸入了一個不是日期類型的數(shù)據(jù),或者把2009年5月20日寫成了2009年5月40日.這很可能是筆誤,但這畢竟是錯誤,數(shù)據(jù)庫無法識別類似的錯誤.為此最好能夠在應用程序客戶端處就進行檢查.如果發(fā)現(xiàn)這個輸入的日期非法的話,就在客戶端把這個參數(shù)傳遞給數(shù)據(jù)庫之前就提示參數(shù)輸入錯誤.另外事由這個字段應該是跟列表類似的數(shù)據(jù)類型.在數(shù)據(jù)庫中只保存著對應的幾個編碼.也就是說,其輸入的是有一定含義的序列.對于這種數(shù)據(jù),在客戶端上也需要進行控制.其實控制起來也很簡單.即不要讓用戶自己手工輸入,而是通過復選框的形式來用戶來進行選擇.然后應用程序直接根據(jù)選擇的內(nèi)容翻譯成對應的參數(shù)然后傳遞給數(shù)據(jù)庫中的SQL語句.顯然在應用程序客戶端層面可以對參數(shù)的合法性進行控制,最大限度的保障輸入的數(shù)據(jù)符合

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論