精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

SQL Server管理員不易養(yǎng)成的好習(xí)慣(附小工具)

數(shù)據(jù)庫 SQL Server
有些好習(xí)慣的養(yǎng)成需要時間,本文將為大家介紹一個眾多SQL Server管理員都不易養(yǎng)成的好習(xí)慣——代碼大寫,同時還為大家提供了一個小工具來改進。

一、開發(fā)初衷

相信大家在平時寫SQL語句的時候,為了節(jié)省時間,都不太喜歡把小指放到Shift鍵上打出關(guān)鍵字的大寫形式,比如建數(shù)據(jù)庫,直接就create database...了,而不是CREATE DATABASE,反正SQL SERVER都可以執(zhí)行語句,所以也就無所謂代碼的效果了。

的確如此,但是編程都有規(guī)范一說,在SQL的編寫中,將關(guān)鍵字大寫就是一個規(guī)范,所以如果有這樣的工具能夠方便象我也是這樣的懶人,批量將關(guān)鍵字替換成大寫那就好了,不過飯來張口、衣來伸手可不是什么好習(xí)慣,所以還是DIY吧。。。

二、開發(fā)思路

建立Winform應(yīng)用程序,依據(jù)需求此工具需要實現(xiàn)三個方面:

1、打開對話框——選擇要處理的SQL文件路徑;

2、保存對話框——選擇處理完成后輸出文件的路徑;

3、核心功能——用正則表達式查找SQL文件中的關(guān)鍵字,如有匹配則將其轉(zhuǎn)換為大寫。

三、開發(fā)過程

俗話說:計劃趕不上變化。本來計劃一兩個小時就能夠搞定,但是還是足足折騰了一個下午,實在有些汗顏,下面就詳細敘述一下過程吧:

1、搜集SQL關(guān)鍵字

要說SQL關(guān)鍵字,除了大家常見的CRUD相關(guān)的語句,還有FUNCTION、CURSOR、PROCEDURE、系統(tǒng)內(nèi)置VARIABLE、VIEW、SCHEMA等等等等,總之一大堆,而且貌似也超出關(guān)鍵字的范疇了,要想完全搞定這么多東西,俺實在只能說無能為力了,所以我只搜集了大家平時經(jīng)常用到的一些關(guān)鍵字,在下面的代碼中會看到。

PS:當(dāng)然如果園子里哪位能夠做出一個覆蓋所有SQL那樣強大的來,小弟一定前往拜讀。

2、SQL文件語句的遍歷

不像ORACLE里的SQL PLUS那樣難用的東西(主要是俺太菜了,經(jīng)常出紕漏,很難一下就寫對SQL),在SQL SERVER中SQL語句可以上下鍵隨意更改內(nèi)容或格式,而且語句也不用強制分號作為結(jié)尾,所以復(fù)雜的時候幾行甚至十幾行才是一個完整的SQL語句,所以一開始我就嘗試從頭到尾遍歷整個文件貌似有些不太現(xiàn)實,最后的方案是采用了按行劃分,以一行為一個數(shù)組進行處理,代碼如下: 

  1. //先以行作為劃分,得到一個數(shù)組  
  2.  Regex rowReg = new Regex("\r\n");  
  3.  string[] strRow = rowReg.Split("轉(zhuǎn)換的SQL源文件內(nèi)容"); 

3、現(xiàn)在依然不能急著處理strRow數(shù)組中的每一個元素,因為元素中有可能會出現(xiàn)"  create       database   "這樣的情況,即關(guān)鍵字兩側(cè)有一個或多個空格字符,如果不進行統(tǒng)一處理,會給后面的替換帶來很大的麻煩,所以這里再用一個正則表達式,使空格通通變成一個,隨后再以空格作為分割符,這樣才算得到了我們真正需要進行匹配替換操作的數(shù)組:

  1. for (int i = 0; i < strRow.Length; i++)  
  2.  {  
  3. strRow[i] = Regex.Replace(strRow[i], @"\s+"" ");  
  4. string[] strRowDetail = strRow[i].Split(new char['\0']);  

4、下面循環(huán)遍歷strRowDetail數(shù)組中的每一項:

  1. for (int j = 0; j < strRowDetail.Length; j++)  
  2.  {  
  3.       if (regex.regRow.IsMatch(strRowDetail[j]))  
  4.       {  
  5.    Match match = regex.Match(strRowDetail[j]);  
  6.             ...  
  7.      }  
  8.  } 
 

為什么暫時省略了后面的代碼呢,因為這樣寫考慮是不周全的,試想如果一個SQL語句如:

  1. create table student  
  2.  (  
  3.      cno varchar(50),  
  4.      ...  
  5.  ) 

這樣關(guān)鍵字一個是一個的話,那匹配起來自然沒有問題,但很多時候事情并沒有那么簡單,有些SQL語句包含了很多關(guān)鍵字。

最典型的就是日期類型的操作,比如:

  1. --求本月天數(shù):select day(dateadd(mm,1,getdate())-day(getdate())); 
 

這樣的一個SQL語句我們以空格劃分后,那么數(shù)組的第二個元素會是day(dateadd(mm,1,getdate())-day(getdate())),如果進行上述的Match匹配就只會將第一個day變?yōu)榇髮懀渌麆t沒有得到處理。

進行了一定的測試后,我轉(zhuǎn)用了MatchCollection類,代碼如下(注:tbSource指的是顯示SQL代碼的文本框):

  1. for (int j = 0; j < strRowDetail.Length; j++)  
  2. {  
  3.      //regex.regRow指的是尋找匹配關(guān)鍵字的正則表達式,在代碼下載中會看到  
  4.    //首先查看strRowDetail[j]是否能夠匹配  
  5.       if (regex.regRow.IsMatch(strRowDetail[j]))  
  6.      {   
  7.          //若能匹配則記錄其匹配的內(nèi)容   
  8.             MatchCollection mc = regex.regRow.Matches(strRowDetail[j]);   
  9.            //遍歷匹配的集合  
  10.            for (int k = 0; k < mc.Count; k++)  
  11.         {  
  12.                //循環(huán)替換匹配的項  
  13. strRowDetail[j] = strRowDetail[j].Replace(               
  14. mc[k].Value, mc[k].Value.ToUpper());  
  15.            }  
  16.             //附加替換完成后的內(nèi)容  
  17.              this.tbSource.Text += strRowDetail[j] + " ";  
  18.       }  
  19.        //不匹配則直接附加原來的內(nèi)容  
  20.         else 
  21.        {  
  22.             this.tbSource.Text += strRowDetail[j] + " ";  
  23.        }  
  24.  }  
  25.   //因為最初是以行分割的,所以這里要附加\r\n,從而保持其原來的格式  
  26.   this.tbSource.Text += "\r\n"

 5、最后用StreamWriter將得到的內(nèi)容寫入文件,這里除了編碼問題貌似也沒啥好說的了:

  1. StreamWriter writer = new StreamWriter(this.tbExportPath.Text, false
  2. Encoding.Default);  
  3. writer.WriteLine(this.tbSource.Text);  
  4. writer.Flush(); 

四、效率測試

細心的你在閱讀代碼的過程中可能已經(jīng)發(fā)現(xiàn)我在大量的字符串處理操作時一直在使用普通的字符串"+="這樣的方法,其實這也是我為我的效率小測驗準(zhǔn)備的,這下可以再切實的體會一下StringBuilder對效率的提升。

要測試那還是要請出我們的Stopwatch了,相信大家都會的了,下面的代碼直接無視:

  1. StreamWriter writer = new StreamWriter(this.tbExportPath.Text, false,                                              Encoding.Default);  
  2. writer.WriteLine(this.tbSource.Text);  
  3. writer.Flush(); 
 

如果使用原來普通字符串連接的方法,足足等了我5347毫秒!

     而如果使用StringBuilder對象作字符串操作,并且為提高for循環(huán)效率,避免每次重復(fù)計算數(shù)組長度,先將數(shù)組的長度存儲在變量中,優(yōu)化代碼如下:

  1. int strRowDetailLength = strRowDetail.Length;   
  2.  for (int j = 0; j < strRowDetailLength; j++)   
  3.  {   
  4.      if (regex.regRow.IsMatch(strRowDetail[j]))  
  5.      {   
  6.        MatchCollection mc = regex.regRow.Matches(strRowDetail[j]);   
  7.          int mcCount = mc.Count;  
  8.          for (int k = 0; k < mcCount; k++)   
  9.          {  
  10.     strRowDetail[j] = strRowDetail[j]                            
  11. .Replace(mc[k].Value, mc[k].Value.ToUpper());  
  12.          }  
  13.          strBuilder.Append(strRowDetail[j] + " ");  
  14.      }  
  15.    else15     {  
  16.    strBuilder.Append(strRowDetail[j] + " ");  
  17.       }  
  18. }  
  19. strBuilder.Append("\r\n"); 

測試的結(jié)果是34毫秒,hoho,StringBuilder的威力果然很強大。。。

五、項目說明

1、介于正則表達式實在是礙眼,所以就沒有貼出來,說實話我自己都不忍心看了。。。

2、麻雀雖小也要五臟俱全嘛,這個小工具在界面上使用了錢李峰同學(xué)的 美化版Winform,沒經(jīng)作者同意就亂打廣告,忘作者不要介意啊 ^_^

六、后續(xù)問題

1、希望大家在看完后能夠指出我在解決的思路上有沒有什么問題,有沒有什么簡單的方法,因為雖然實現(xiàn)了,但個人感覺方法上有點齪。。。

2、期待哪位能夠開發(fā)出更完善更優(yōu)雅的SQL關(guān)鍵字替換工具。。。

3、如有使用問題請及時留言。。。

七、項目下載

http://files.cnblogs.com/RockyMyx/Solution.rar

原文標(biāo)題:DIY小工具開發(fā)---SQL關(guān)鍵字批量轉(zhuǎn)換

鏈接:http://www.cnblogs.com/RockyMyx/archive/2010/04/21/Convert-Sql-Keyword.html

【編輯推薦】

  1. SQL Server使用索引實現(xiàn)數(shù)據(jù)訪問優(yōu)化
  2. SQL Server數(shù)據(jù)庫優(yōu)化經(jīng)驗總結(jié)
  3. 如何使用SQLServer數(shù)據(jù)庫查詢累計值
  4. 淺析Oracle和SqlServer存儲過程的調(diào)試、出錯處理
  5. 幾段SQLServer語句和存儲過程
  6. 50種方法優(yōu)化SQL Server數(shù)據(jù)庫查詢

 

 

責(zé)任編輯:彭凡 來源: 博客園
相關(guān)推薦

2022-04-08 14:38:43

程序員習(xí)慣終端

2022-09-16 00:32:39

SQL數(shù)據(jù)庫習(xí)慣

2010-09-08 12:55:34

CSS

2013-12-17 10:48:20

2011-05-30 13:27:09

2011-04-19 10:20:09

數(shù)據(jù)庫

2010-05-19 19:10:42

2021-05-29 07:32:14

優(yōu)秀程序員代碼

2021-05-19 08:55:37

代碼程序員經(jīng)驗分享

2009-11-19 08:48:10

Windows 7桌面工具

2009-09-15 16:16:35

代碼習(xí)慣

2022-10-08 10:42:20

Linux虛擬機

2010-06-11 14:35:18

UML序列圖

2014-07-29 13:32:15

2020-11-02 13:03:28

MySQLSQL索引

2024-02-26 08:13:51

MySQLSQL性能

2019-10-16 08:00:00

網(wǎng)管員IT網(wǎng)絡(luò)

2011-07-15 15:10:37

PHP

2017-04-12 09:34:30

數(shù)據(jù)科學(xué)家統(tǒng)計學(xué)家好習(xí)慣

2010-07-01 10:24:30

UML小工具
點贊
收藏

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

99国产盗摄| 亚洲天堂第一页| 3d动漫一区二区三区| 无套内谢的新婚少妇国语播放| 亚洲视频成人| 色诱女教师一区二区三区| 波多野结衣免费观看| av影片在线| 国产欧美一区二区精品秋霞影院| 成人激情av在线| 日本熟妇毛耸耸xxxxxx| 狠狠操综合网| 日韩美一区二区三区| 久久婷婷国产精品| bt在线麻豆视频| www精品美女久久久tv| 成人h猎奇视频网站| 999这里只有精品| 亚洲成av人片一区二区密柚| 日韩大陆欧美高清视频区| 狠狠操狠狠干视频| 欧美男男激情videos| ...av二区三区久久精品| 九色91视频| av高清一区二区| 日韩二区三区四区| 97免费视频在线| 婷婷伊人五月天| 精品黄色一级片| 亚洲国产成人在线播放| 国产美女视频免费看| 中文字幕乱码在线播放| 亚洲一区中文在线| 亚洲人成77777| 国自产拍在线网站网址视频| 成人免费黄色大片| 亚洲www在线| 亚洲天堂免费av| 日韩精品久久理论片| 国产91精品久久久久久| 久久艹精品视频| 91精品一区二区三区综合在线爱| 一区二区av在线| 精品国产av无码| 欧美亚洲色图校园春色| 精品美女在线观看| 在线成人免费av| 高清久久一区| 91精品国产综合久久小美女| 国产aaaaa毛片| 成人看片在线观看| 色综合久久久网| 少妇性饥渴无码a区免费| 91破解版在线观看| 国产欧美日韩视频在线观看| 国产精品剧情在线亚洲| 国产精品久久久久久久久久直播| 亚洲一区二区三区网站| 日本亚洲欧美天堂免费| 日本久久久久久久久| 国内免费精品视频| 影音先锋日韩资源| 久久久久女教师免费一区| 久久精品www人人爽人人| 欧美在线高清| 欧美激情欧美狂野欧美精品| 欧美激情国产精品免费| 国产一区二区三区四区老人| 久久99久久99精品免观看粉嫩| 久久国产高清视频| 亚洲欧美日韩高清在线| 久久99热这里只有精品国产| 精品视频一区二区在线观看| 亚洲美女视频在线免费观看| 欧美亚洲第一页| 国产在线观看第一页| 精品人妻午夜一区二区三区四区| 首页综合国产亚洲丝袜| 国产成人免费av电影| 免费一级a毛片| 免费在线欧美视频| 91在线高清免费观看| 性生活免费网站| 99久久久无码国产精品| 日本不卡一区| 麻豆免费在线观看| 亚洲永久免费av| 日韩在线视频在线观看| 日韩久久一区二区三区| 欧美三级日韩在线| 无套内谢丰满少妇中文字幕 | 精品乱子伦一区二区| av午夜精品一区二区三区| 天天好比中文综合网| 五月天激情在线| 欧美日韩亚洲视频一区| 少妇一级淫免费播放| 在线播放一区二区精品视频| 亚洲欧美在线x视频| 国产免费美女视频| 在线亚洲观看| 成人免费视频网址| 色窝窝无码一区二区三区| 欧美激情一二三区| 99热这里只有精品免费| 自拍在线观看| 日韩一区二区免费电影| 久久精品国产亚洲AV熟女| 天堂美国久久| 2019中文字幕在线| 国产成人免费看一级大黄| 91蜜桃免费观看视频| 精品日韩在线播放| 成人动漫一区| 精品国产乱码久久久久久夜甘婷婷| 性の欲びの女javhd| 亚洲网站啪啪| 91久久久久久久久久久久久| 日韩av视屏| 一区二区三区四区亚洲| 在线观看免费成人av| 国产suv精品一区| 日韩三级成人av网| 中文字幕一区二区人妻视频| 成人av在线电影| 伊人久久av导航| 偷拍视频一区二区三区| 精品1区2区在线观看| 精品无码久久久久成人漫画| 蜜桃一区二区三区四区| 欧美色欧美亚洲另类七区| 成人在线免费观看黄色| 欧美一卡在线观看| 成人黄色短视频| 老司机精品导航| 久久久久天天天天| 97人澡人人添人人爽欧美| 日韩一区二区三区四区五区六区| 国产午夜精品久久久久久久久| 先锋影音国产一区| 极品日韩久久| 国产伦子伦对白在线播放观看| 69视频免费看| 国产校园另类小说区| 免费一级特黄毛片| 国产福利资源一区| 欧美激情精品久久久久久蜜臀| 国产乱淫a∨片免费观看| 国产精品不卡一区二区三区| 久久婷婷国产91天堂综合精品| 欧美自拍一区| 欧美在线亚洲一区| 麻豆app在线观看| 在线观看一区不卡| 一区二区伦理片| 蜜臀久久99精品久久久久宅男| 色999日韩自偷自拍美女| 日韩一区二区三区免费| 亚洲网址你懂得| 中文字幕在线观看高清| 中文字幕一区二区三区乱码在线 | 在线观看欧美一区| 91视频亚洲| 超碰91人人草人人干| 99久久夜色精品国产亚洲| 亚洲免费三区一区二区| 国产欧美视频一区| 亚洲精选国产| 日本一区二区高清视频| 九九久久国产| 欧美精品一区三区| 天天干天天干天天干| 色综合久久久久久久久久久| 人妻aⅴ无码一区二区三区| 毛片av一区二区三区| 超级碰在线观看| 美女一区二区在线观看| 国产成人在线亚洲欧美| 黄色网在线看| 亚洲国产精品va在线看黑人动漫 | 香蕉久久夜色精品国产| 日韩精品一区二区三区外面 | 欧美做爰爽爽爽爽爽爽| 成人免费高清在线观看| 久久久久久久久久久久久久国产| 水蜜桃精品av一区二区| 岛国视频一区| 视频二区不卡| 美女扒开尿口让男人操亚洲视频网站| 亚洲精品一区二区三区新线路| 欧美性猛交xxxxx水多| a级黄色免费视频| 国产成a人亚洲| 可以免费在线看黄的网站| 亚洲成人av| 国产一区精品在线| 亚洲一区二区小说| 91精品国产高清自在线看超| 中文字幕在线中文| 免费在线观看一级毛片| 欧美日韩免费一区二区三区 | 你懂的国产在线| 国产日本一区二区| 手机av在线网站| 香蕉av777xxx色综合一区| 久久综合久久综合久久综合| 久久视频这里有精品| 色综合久久一区二区三区| 国产精品日韩一区二区免费视频| 国产韩日精品| 久久理论片午夜琪琪电影网| 91在线免费看| 日韩国产精品视频| 精品久久久久久电影| 久久精品女人的天堂av| 欧美91在线|欧美| 国内精品国产三级国产在线专| 九色视频在线播放| 精品美女一区二区| 一区二区视频免费观看| 午夜久久久影院| 国产成人av在线| av电影在线网| 日韩成人激情视频| 精品国自产在线观看| 欧美亚洲愉拍一区二区| 久久久久久少妇| 亚洲一区二区在线视频| 免费三级在线观看| 国产精品色呦呦| 久久国产柳州莫菁门| 99久久久精品免费观看国产蜜| 台湾佬美性中文| 韩国毛片一区二区三区| 亚洲欧美日韩精品一区| 毛片网站在线看| 一区三区二区视频| 日本一卡二卡四卡精品| 亚洲国产高清高潮精品美女| www.亚洲天堂.com| 日韩一区二区精品在线观看| 91久久久久久久久久久久| 欧美午夜不卡视频| 青青国产在线视频| 欧美自拍偷拍一区| 中文无码av一区二区三区| 91福利视频久久久久| 久久青青草原亚洲av无码麻豆| 黑人巨大精品欧美一区二区三区 | 欧洲亚洲精品视频| 日韩精品中文字幕久久臀| 神马午夜在线观看| 日韩精品久久久久久久玫瑰园| 无码精品在线观看| 亚洲欧美综合v| 成人jjav| 久久久国产一区| 亚洲色图美国十次| 欧美韩国理论所午夜片917电影| 青草视频在线免费直播| 欧美激情视频网站| 欧美xxxhd| 国产成人精品久久久| 成人激情视屏| 午夜精品免费视频| 一级片免费观看视频| 欧美午夜精品一区二区三区| 成人黄色三级视频| 7777精品伊人久久久大香线蕉最新版| 怡红院男人的天堂| 制服丝袜中文字幕一区| 丰满人妻熟女aⅴ一区| 亚洲国产精品va在线看黑人| 邻家有女韩剧在线观看国语| 日韩中文字幕在线播放| 制服丝袜在线播放| 97免费在线视频| 97欧美成人| 亚洲999一在线观看www| av不卡一区| 九色一区二区| 日韩电影免费网址| 国产亚洲精品久久久久久久| 午夜在线精品| 午夜视频在线观| 91在线视频18| 亚洲综合图片一区| 香蕉成人伊视频在线观看| 日韩一级片中文字幕| 日韩视频国产视频| 户外极限露出调教在线视频| 久久综合88中文色鬼| 成人国产二区| 91麻豆精品秘密入口| 免费视频亚洲| 久久av高潮av| 日本麻豆一区二区三区视频| 亚洲精品乱码久久久久久蜜桃欧美| 国产亚洲欧洲一区高清在线观看| 91视频免费在线看| 欧美中文字幕亚洲一区二区va在线| 精品久久无码中文字幕| 夜夜嗨av色一区二区不卡| 欧美家庭影院| 国产欧美一区二区| 台湾色综合娱乐中文网| 在线视频一二三区| 丝袜美腿亚洲综合| 丰满岳乱妇一区二区| 国产精品久久久久影院老司| 男女视频免费看| 8x8x8国产精品| 国产黄在线看| 91国产精品电影| 中文一区二区三区四区| 亚洲午夜精品福利| 久久精品日产第一区二区 | 亚洲性无码av在线| 暧暧视频在线免费观看| 91最新国产视频| 成人嫩草影院| 免费日韩中文字幕| 99re亚洲国产精品| 久久香蕉精品视频| 欧美高清hd18日本| 91免费在线| 国产精品久久久91| 国产精品手机在线播放| 男人插女人视频在线观看| 国产高清一区日本| 亚洲二区在线播放| 深夜视频在线观看| 久久精品成人| 亚洲少妇中文字幕| 亚洲免费伊人电影| 一级片aaaa| www国产精品视频| ww久久综合久中文字幕| 奇米影视首页 狠狠色丁香婷婷久久综合| 悠悠资源网久久精品| 国产吃瓜黑料一区二区| 一区二区视频在线| www.国产黄色| 欧美精品免费播放| 国产亚洲高清一区| 中国黄色录像片| 韩国欧美一区二区| 久久高清内射无套| 日韩视频在线你懂得| 日本天码aⅴ片在线电影网站| 51国偷自产一区二区三区的来源 | 99tv成人影院| 中文字幕色一区二区| 韩国欧美国产1区| 免费中文字幕在线| 欧美成人官网二区| 19禁羞羞电影院在线观看| 国产精品国产一区二区| 日韩视频一区| 久久精品国产亚洲AV熟女| 欧美特级限制片免费在线观看| 91精品大全| 69堂成人精品视频免费| 亚洲小说区图片区| 成人精品在线观看视频| 色94色欧美sute亚洲线路二| 亚洲s色大片| 91久久久一线二线三线品牌| 99精品99| 三区四区在线观看| 91精品国产欧美日韩| 国模雨婷捆绑高清在线| 久久精品人成| 精品在线一区二区| 国产精品成人av久久| 亚洲男人天堂九九视频| 欧美视频免费看| 国产精品成人久久电影| 91色porny在线视频| 中文字幕在线播放日韩| 欧美国产日韩免费| 久久超碰99| 亚洲一二三不卡| 精品久久香蕉国产线看观看亚洲 | 日本精品一二三| 一本一本大道香蕉久在线精品| 免费av在线播放| 韩日午夜在线资源一区二区| 日韩电影在线观看网站| 农村妇女精品一区二区| 亚洲精品自产拍| 福利一区三区| 97在线免费公开视频| 亚洲日本在线a| 久草视频视频在线播放| 2022国产精品| 蜜臀av一级做a爰片久久| 伊人国产在线观看| 色偷偷888欧美精品久久久| 久久久久97|