日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

分析sql语句所有表名及其别名的正则表达式

發布時間:2023/12/13 综合教程 21 生活家
生活随笔 收集整理的這篇文章主要介紹了 分析sql语句所有表名及其别名的正则表达式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近為了 寫一個分布式的數據組件構想了很多的方案,最近一個簡單易行的方案終于在腦袋里成型。昨晚想到凌晨1點多,發現方案雖簡單,但所有的數據庫工具就不能使用了 。除非自己寫一下查詢分析器來執行程序員自己的維護語句。

說做就做,事情也出乎順利,居然半天時間做了一個基本的版本出來了:)

于是就想想能否加上智能提示字段。似乎難在分析程序員錄入的語法。當然說白了也簡單就是取出表的別名。家里的空調沒錢換,為了省100大元,還要晚幾天才有得用。于是今晚繼續晚點睡,把這個正則表達式弄出來,明天上班就能繼續開發查詢分析器了。

事情也沒有想象的復雜,不到半小時,正則表達式整理出來了。利用下面的兩個正則應就能分析出語法中的表名和其別名

s+froms+(w+)s+(w+)s+(where|left|join|inner)

s+joins+(w+)s+(w+)s+on

為了測試方便我使用了Combox來保存整理出來的表達式,于是取所有表和別名的代碼是這樣的

            DataTable table = new DataTable();
            table.Columns.Add("tableName");
            table.Columns.Add("aliasName");
            foreach (string str in this.comboBox1.Items)
            {
                Regex reg = new Regex(str);
                MatchCollection mces = reg.Matches(this.richTextBox1.Text);
                foreach (Match mc in mces)
                {
                    DataRow row = table.NewRow();
                    row["tableName"] = mc.Groups[1].Value;
                    row["aliasName"] = mc.Groups[2].Value;
                    table.Rows.Add(row);
                }
            }
            this.dataGridView1.DataSource = table.DefaultView;

以下是我用于測試的sql

select * from Outvisit l
left join patient p on l.patid=p.patientid
join patstatic c on   l.patid=c.patid inner join patphone  ph  on l.patid=ph.patid
where l.name='kevin' and exsits(select 1 from pharmacywestpas p where p.outvisitid=l.outvisitid)
unit all
select * from invisit v where

最后是我測試的小程序的截圖

總結

以上是生活随笔為你收集整理的分析sql语句所有表名及其别名的正则表达式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。