成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

查詢參數(shù)提高SQL語句的利用率

運(yùn)維 數(shù)據(jù)庫運(yùn)維
數(shù)據(jù)庫的應(yīng)用中,參數(shù)的查詢時(shí)數(shù)據(jù)庫管理員經(jīng)常會用到的一種數(shù)據(jù)庫功能,本文要為大家介紹的是查詢參數(shù)提高SQL語句的利用率。

導(dǎo)讀:有時(shí)候數(shù)據(jù)庫管理員在查詢記錄的時(shí)候,有可能只是查詢條件不同,而其他的內(nèi)容都是相同的。如人事部門可能每天都需要查詢當(dāng)天礦工、遲到、早退的員工,然后向人事經(jīng)理匯報(bào)。其實(shí)這個(gè)時(shí)候SQL語句的大部分都是相同的,只是查詢條件中一個(gè)時(shí)間不一樣而已。遇到這種情況時(shí),數(shù)據(jù)庫管理員需要創(chuàng)建可以使用多次但每次使用不同值的查詢。在SQLServer數(shù)據(jù)庫中,把這種情況叫做參數(shù)查詢。參數(shù)的查詢要利用SQL語句,從而提高了SQL語句的利用率。

  一、 在什么時(shí)候使用參數(shù)符號。

  在SQLServer數(shù)據(jù)庫中,其提供的語言支持使用參數(shù)來作為查詢條件。如果用戶需要創(chuàng)建每次使用不同值的查詢,則可以在查詢中使用參數(shù)。那么這個(gè)參數(shù)到底是什么呢?其實(shí)確切的說,應(yīng)該把這個(gè)參數(shù)叫做占位符。即參數(shù)是在運(yùn)行查詢時(shí)提供值的占位符。在SQLServer數(shù)據(jù)庫中,在需要顯示的內(nèi)容(Select子句)與查詢條件(Where子句)中都可以采用參數(shù),從其他地方接收輸入的值。不過大部分情況下,都只在查詢條件中使用參數(shù)。即在單個(gè)行或者組的搜索條件中使用參數(shù)作為占位符。

  不過并不是說只有在搜索條件中才能夠使用參數(shù),只是說在搜索中參數(shù)使用的比較多而已。另外,有時(shí)候在表達(dá)式中可能也會用的比較多。如一個(gè)ERP系統(tǒng)中,可能會有一定的價(jià)格折扣,如5%的折扣。那么在應(yīng)用程序設(shè)計(jì)的時(shí)候,就需要把這個(gè)折扣率從前臺傳遞到后臺的SQL語句中。然后數(shù)據(jù)庫系統(tǒng)根據(jù)這個(gè)折扣率把計(jì)算后的架構(gòu)回傳給前臺的客戶端。在這個(gè)過程中,如果能夠采用參數(shù)來實(shí)現(xiàn)的話,就可以提高SQL語句的利用率。不用每次使用不同的折扣率,而采用不同的SQL語句。

  所以說,參數(shù)在SQLServer中的應(yīng)用范圍是非常廣泛的。通常情況下,在SQL語句的任何部分都可以采用參數(shù)來接受外部傳入的值,從而避免每次參數(shù)不同而調(diào)整SQL語句的情況。

  二、 未命名參數(shù)與命名參數(shù)。

  在SQLServer中,參數(shù)可以分為兩種,即未命名參數(shù)與命名參數(shù)。通常情況下,如果SQL語句中只需要一個(gè)參數(shù)的話,那么可以采用未命名參數(shù)。如需要查詢某個(gè)員工上班到現(xiàn)在的全部出勤信息。此時(shí)就只需要用到員工編號這個(gè)參數(shù)即可。此時(shí)可以采用未命名的參數(shù)。不過有的時(shí)候可能查詢時(shí)需要不止一個(gè)參數(shù)。如現(xiàn)在需要查詢某個(gè)員工在4月份的出勤情況。此時(shí)就需要兩個(gè)參數(shù),分別為員工編號、月份?;蛘咝枰齻€(gè)參數(shù),分別為員工編號、開始日期、結(jié)束日期等等??傊嘤谝粋€(gè)參數(shù)。此時(shí)就需要使用命名參數(shù)。因?yàn)槿绻褂梦疵麉?shù)的話,則數(shù)據(jù)庫并不知道要把哪個(gè)參數(shù)對應(yīng)到哪個(gè)地方。所以說,如果要在查詢中使用多個(gè)參數(shù),那么此時(shí)命名參數(shù)就會非常有用。

  未命名的參數(shù)使用很簡單。不需要像應(yīng)用程序開發(fā)那樣,先聲明再使用。而是在需要的地方直接輸入?符號即可。如需要把某個(gè)員工最為參數(shù)的話,則可以使用ad_user_id =?即可。這里需要注意一點(diǎn),這里不需要加入單引號。因?yàn)檎G闆r下,如果輸入的條件是字符型的話,則必須利用單引號括起來。如果輸入的條件是數(shù)字的話,則不用單引號。但是如果采用的是參數(shù)的話,無論最終輸入的數(shù)據(jù)類型是什么,這里都不用單引號。否則的話,就不能夠達(dá)到預(yù)期的效果。

  如果采用的是命名參數(shù)的話,也不需要事先定義。只需要在使用的時(shí)候定義參數(shù)名字即可。這個(gè)定義的過程也很簡單。如現(xiàn)在用戶需要按員工編號與日期來查詢某個(gè)員工的出勤記錄。此時(shí)只需要使用AD_USER_ID=%USER_ID% AND USERDATE=%USERSDATE%。從這里可以看出,未命名參數(shù)與命名參數(shù)使用的參數(shù)符號是不同的。在命名參數(shù)是,需要中參數(shù)名字的前后使用%號,表示這是一個(gè)命名參數(shù)。不過這個(gè)前綴與后綴的字符數(shù)據(jù)庫管理員可以根據(jù)自己的需要來進(jìn)行自定義。不過需要注意的就是,在創(chuàng)建命名參數(shù)查詢之前,必須要先預(yù)先定義后這個(gè)參數(shù)的前綴與后綴符號。

  三、 在循環(huán)中使用參數(shù)標(biāo)記。

  參數(shù)不僅可以用在Select查詢語句中,有時(shí)候在一些循環(huán)語句中也可以使用。如現(xiàn)在有一個(gè)股票分析系統(tǒng)。用戶自定義了10只關(guān)注的股票?,F(xiàn)在這個(gè)系統(tǒng)要每隔30秒就從數(shù)據(jù)庫系統(tǒng)中讀取這十只股票的***價(jià)格。此時(shí)該如何實(shí)現(xiàn)呢?

  當(dāng)然用戶也可以在查詢條件語句中通過輸入10個(gè)股票的代碼來實(shí)現(xiàn)查詢。但是這個(gè)做非常的麻煩。而且由于用戶關(guān)注的股票數(shù)量不確定,所以采用多個(gè)命名參數(shù)來實(shí)現(xiàn)的話,也不現(xiàn)實(shí)。雖然SQL語句可以接受多個(gè)參數(shù),但是其參數(shù)的數(shù)量必須是固定的。像現(xiàn)在這種不固定的參數(shù),SQL語句也很難實(shí)現(xiàn)。針對這種情況,只有通過循環(huán)語句來實(shí)現(xiàn)。即在SQL語句中只使用一個(gè)參數(shù),即股票代碼這個(gè)參數(shù)。然后通過循環(huán)語句把用戶選定的股票代碼一個(gè)一個(gè)的傳遞進(jìn)去。傳進(jìn)去***個(gè)后,數(shù)據(jù)庫返回結(jié)果;然后再傳進(jìn)去第二個(gè),再返回結(jié)果。知道***一個(gè)參數(shù)傳遞完畢。通常情況下,可以把這個(gè)循環(huán)語句做成一個(gè)存儲過程或者函數(shù)。然后通過參數(shù)的個(gè)數(shù)來控制循環(huán)的次數(shù)。這種解決方案可以很好的實(shí)現(xiàn)因?yàn)閰?shù)個(gè)數(shù)不確定而難以處理的情況。當(dāng)然,這其中仍然參數(shù)在起著主導(dǎo)作用。

  四、 在SET語句中使用參數(shù)。

  企業(yè)有時(shí)候可能遇到這種需求,即把滿足某個(gè)條件的記錄中,某些字段利用某個(gè)參數(shù)值來進(jìn)行代替。如企業(yè)可能經(jīng)濟(jì)效益好,要把提升員工的工資。其中普通員工提升10%,管理層員工提升15%。此時(shí)就需要用到SQL語句中的Update語句。這更新的時(shí)候,需要用到兩個(gè)參數(shù)。一個(gè)是員工的類別,即是屬于普通員工又或者是屬于管理層員工;第二個(gè)參數(shù)是提升的百分比,是提升10%還是15%。

  其實(shí)在實(shí)際工作中,有很多地方需要用到類似地參數(shù)與語句。如在ERP系統(tǒng)中,有時(shí)候需要根據(jù)產(chǎn)品的類別或者供應(yīng)商來更新價(jià)格;如有時(shí)候需要把好幾年都沒有用過的產(chǎn)品信息設(shè)置為不活躍;有時(shí)候需要把訂單尾數(shù)少于5的采購訂單指定為結(jié)束等等。所有,數(shù)據(jù)庫管理員必須要掌握這種參數(shù)與Upadate語句結(jié)合使用的案例。這有助于數(shù)據(jù)庫管理員在日后的工作中,利用這些語句順利完成任務(wù)。

  五、 使用參數(shù)時(shí)的注意事項(xiàng)。

  從上面分析中可以看出,使用參數(shù)與不使用參數(shù)有一個(gè)很大的區(qū)別。如果直接在SQL語句中輸入查詢條件(不通過參數(shù)來實(shí)現(xiàn)),那么數(shù)據(jù)庫在編譯SQL語句的時(shí)候,會進(jìn)行語法方面的檢查。如果輸入的條件有錯(cuò)誤,或者其數(shù)據(jù)類型跟需要比較字段的數(shù)據(jù)類型不一致,或者在SET語句中需要更新的值與數(shù)據(jù)庫字段的數(shù)據(jù)類型不一致的話,那么數(shù)據(jù)庫就會提示錯(cuò)誤信息。也就是說,在執(zhí)行語句之前,就對了一道保障。

  但是如果使用參數(shù)來傳遞數(shù)據(jù)的話,有一個(gè)不好的信息。即在SQL語句執(zhí)行時(shí),傳遞的參數(shù)是否符合要求呢?此時(shí)對數(shù)據(jù)庫來說,只有在SQL語句執(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ù)庫無法識別類似的錯(cuò)誤。為此***能夠在應(yīng)用程序客戶端處就進(jìn)行檢查。如果發(fā)現(xiàn)這個(gè)輸入的日期非法的話,就在客戶端把這個(gè)參數(shù)傳遞給數(shù)據(jù)庫之前就提示參數(shù)輸入錯(cuò)誤。

  另外事由這個(gè)字段應(yīng)該是跟列表類似的數(shù)據(jù)類型。在數(shù)據(jù)庫中只保存著對應(yīng)的幾個(gè)編碼。也就是說,其輸入的是有一定含義的序列。對于這種數(shù)據(jù),在客戶端上也需要進(jìn)行控制。其實(shí)控制起來也很簡單。即不要讓用戶自己手工輸入,而是通過復(fù)選框的形式來用戶來進(jìn)行選擇。然后應(yīng)用程序直接根據(jù)選擇的內(nèi)容翻譯成對應(yīng)的參數(shù)然后傳遞給數(shù)據(jù)庫中的SQL語句。顯然在應(yīng)用程序客戶端層面可以對參數(shù)的合法性進(jìn)行控制,***限度的保障輸入的數(shù)據(jù)符合SQL語句的要求。避免因?yàn)閿?shù)據(jù)類型不一致而導(dǎo)致SQL語句執(zhí)行錯(cuò)誤。所以,在SQLServer數(shù)據(jù)庫使用參數(shù)的話,數(shù)據(jù)庫管理員還需要跟程序開發(fā)者好好溝通,才能夠讓參數(shù)發(fā)揮其應(yīng)有的作用。

這就是我要為大家介紹的查詢參數(shù)提高SQL語句的利用率的全部內(nèi)容,希望大家能充分理解文章內(nèi)容,將文中的知識真正變成自己的知識,為大家以后的工作帶去便利。

【編輯推薦】

  1. 寫出高性能SQL語句的十三條法則
  2. 開啟MySQL慢查詢 查找影響效率的SQL語句
  3. 通過索引優(yōu)化MySQL語句的實(shí)現(xiàn)方法
責(zé)任編輯:迎迎 來源: IT專家網(wǎng)
相關(guān)推薦

2011-04-02 11:16:16

MRTG監(jiān)控帶寬

2021-02-03 09:26:49

數(shù)據(jù)中心基礎(chǔ)設(shè)施能源

2013-09-29 16:09:26

OpenStack云計(jì)算

2010-11-15 16:46:49

Oracle查詢效率

2022-11-29 11:33:30

戴爾

2012-05-08 15:04:12

Platform

2023-04-04 09:22:50

LinuxCPU命令

2017-08-25 15:56:54

Linuxproc文件系統(tǒng)CPU利用率

2010-03-11 16:49:55

Linux CPU利用

2009-01-15 18:49:03

服務(wù)器虛擬化VMware

2011-07-13 09:16:08

服務(wù)器虛擬化數(shù)據(jù)中心

2013-03-19 12:23:25

SDN網(wǎng)絡(luò)利用率網(wǎng)絡(luò)系統(tǒng)架構(gòu)

2011-04-12 09:07:47

磁盤空間利用率虛擬化的隱藏成本

2012-11-07 15:07:30

VMware虛擬化

2013-04-02 09:15:40

服務(wù)器虛擬化

2012-05-08 13:24:45

負(fù)載均衡帶寬銳捷網(wǎng)絡(luò)

2020-02-26 16:19:44

漏洞網(wǎng)絡(luò)安全

2024-10-14 13:01:33

AOTcpu符號

2011-03-17 15:16:38

2013-01-04 10:44:31

IBMdW
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 亚洲精品在线视频 | 日韩精品在线一区二区 | 青青草华人在线视频 | 日韩欧美黄色 | 日韩一级不卡 | 成人av一区二区三区 | www.青青草 | 精品三级在线观看 | 找个黄色片 | 国产综合视频 | 亚洲区在线 | 久久成人国产精品 | 久久成人精品 | 久久不卡日韩美女 | 99这里只有精品视频 | 好姑娘影视在线观看高清 | 欧美二区三区 | 欧美一二三 | 国产在线精品一区二区三区 | 国产精品日韩一区二区 | 亚洲欧美一区二区三区国产精品 | 中文一级片 | 亚洲欧美激情国产综合久久久 | 亚洲天天干 | 成人做爰www免费看 午夜精品久久久久久久久久久久 | 国产一区二区三区色淫影院 | 亚洲第一在线 | 99pao成人国产永久免费视频 | 国内久久 | 久久久精品 | 久久精品中文字幕 | 亚洲在线中文字幕 | www.色.com | 中文精品视频 | 毛片网站免费观看 | 成人久久18免费 | 成人精品久久日伦片大全免费 | 亚洲免费视频网址 | 一区二区三区在线观看视频 | 影音av| 国产91精品久久久久久久网曝门 |