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

Posted 生命体验之kevin-Y

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分析sql语句所有表名及其别名的正则表达式相关的知识,希望对你有一定的参考价值。

最近为了 写一个分布式的数据组件构想了很多的方案,最近一个简单易行的方案终于在脑袋里成型。昨晚想到凌晨1点多,发现方案虽简单,但所有的数据库工具就不能使用了 。除非自己写一下查询分析器来执行程序员自己的维护语句。

说做就做,事情也出乎顺利,居然半天时间做了一个基本的版本出来了:)

 

于是就想想能否加上智能提示字段。似乎难在分析程序员录入的语法。当然说白了也简单就是取出表的别名。家里的空调没钱换,为了省100大元,还要晚几天才有得用。于是今晚继续晚点睡,把这个正则表达式弄出来,明天上班就能继续开发查询分析器了。

 

事情也没有想象的复杂,不到半小时,正则表达式整理出来了。利用下面的两个正则应就能分析出语法中的表名和其别名

\s+from\s+(\w+)\s+(\w+)\s+(where|left|join|inner)

\s+join\s+(\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语句所有表名及其别名的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

Oracle-18-select语句初步&SQL中用算术表达式&别名的使用&连接运算符%distinct&where子句

d正则表达式相关

sql查询语句

VF中SQl语句中的select语句如何使用……

SQL Select 语句的用法

关系数据标准语言SQL之数据查询