解析SQL中的包含的列和表
using System;
using System.IO;
using System.Collections.Generic; namespace SQLProcess
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!" + DateTime.Now.ToString("yyyyMMdd"));
Dictionary<string, string> tables = new Dictionary<string, string>();
Dictionary<string, string> columns = new Dictionary<string, string>();
//ReadFile(); try
{
// Create an instance of StreamReader to read from a file.
// The using statement also closes the StreamReader.
using (StreamReader sr = new StreamReader(@"C:\Users\stepwan\Desktop\SQLProcess\SQLQuery12.sql"))
{
String line;
// Read and display lines from the file until the end of
// the file is reached.
var isTable=false; while ((line = sr.ReadLine()) != null)
{
if(line.IndexOf("FROM")>-1){
isTable=true;
} if(!isTable){ var dotIndex= line.IndexOf(".");
if(dotIndex>-1){ var tableAs=line.Substring(0,dotIndex);
//Console.WriteLine("tableAs:"+tableAs); var spaceIndex=line.IndexOf(" ",dotIndex);
if(spaceIndex>-1){
var len = spaceIndex;
var colunmName=line.Substring(0,len).Trim();
if(!columns.ContainsKey(colunmName))
columns.Add(colunmName,"");
Console.WriteLine("columnName:"+colunmName.Trim());
} } }
else
{
//from
if(line.IndexOf(" FROM ")>-1){ var fromIndex=line.IndexOf(" FROM ")+6;
var spaceIndex= line.IndexOf(" ",fromIndex); if(spaceIndex>-1)
{
var len =spaceIndex-fromIndex;
var tableName=line.Substring(fromIndex,len).Trim();
var len2=line.Length -spaceIndex;
var tableAs =line.Substring(spaceIndex,len2).Trim();
Console.WriteLine($"tableName:{tableName};tableAs:{tableAs} ,spaceIndex:{spaceIndex},secondeSpaceIndex:{spaceIndex}");
if(!tables.ContainsKey(tableName))
{
tables.Add(tableName,tableAs); } } }
else
{ if(line.IndexOf(" JOIN ")>-1)
{
var joinIndex=line.IndexOf(" JOIN ")+6; var onIndex=line.IndexOf(" ON "); if(onIndex>-1){
var tabelLen=onIndex-joinIndex;
var tableAs=line.Substring(joinIndex,tabelLen).Trim(); var tabelArray=tableAs.Split(' '); if(tabelArray.Length>0){ var tableName=tabelArray[0].Trim();
var tabelAsName=tabelArray[1].Trim();
Console.WriteLine($"tableName:{tableName},{tabelAsName}");
if(!tables.ContainsKey(tableName))
{
tables.Add(tableName,tabelAsName);
} } var conditionLen=line.Length-(onIndex+3); var condition =line.Substring(onIndex+3,conditionLen); if(condition.IndexOf(" AND ")>-1)
{
var conditionArray=condition.Split(" AND "); for (int i = 0; i < conditionArray.Length; i++)
{
Console.WriteLine($"conditionArray[{i}]:{conditionArray[i]}");
var tableColumnArrary=conditionArray[i].Split('=');
for(int c = 0; c < tableColumnArrary.Length; c++)
{
var column=tableColumnArrary[c].Trim();
if(!columns.ContainsKey(column))
{
columns.Add(column,"");
} Console.WriteLine($"tableColumnArrary[{c}]:{column}"); }
} }
else
{
Console.WriteLine($"condition:{condition}"); //table column
var tableColumnArrary=condition.Split('=');
for(int i = 0; i < tableColumnArrary.Length; i++)
{
var column=tableColumnArrary[i].Trim();
if(!columns.ContainsKey(column))
{
columns.Add(column,"");
} Console.WriteLine($"tableColumnArrary[{i}]:{column}");
} } } }
}
} Console.WriteLine(line);
}
}
}
catch (Exception e)
{
throw;
}
CreateTable(tables,columns); } public static void ReadFile()
{
using (StreamReader sr = new StreamReader(@"C:\Users\stepwan\Desktop\SQLProcess\SQLQuery12.sql"))
{
String line;
// Read and display lines from the file until the end of
// the file is reached.
var isTable=false;
var i=0; while ((line = sr.ReadLine()) != null)
{
Console.WriteLine($"line{i}:{line}");
i++;
} }
} public static void CreateTable(Dictionary<string,string> tables,Dictionary<string,string>columns)
{
var t=0;
foreach (var item in tables)
{
t++;
Console.WriteLine($"{t} {item.Key} ,{item.Value}"); }
var c=0;
foreach (var item in columns)
{
var tableAs=item.Key.Split('.')[0];
var output=item.Key; foreach (var table in tables)
{
if(table.Value.ToUpperInvariant()==tableAs.ToUpperInvariant())
{
output=output.Replace(tableAs,table.Key) ;
}
}
c++;
Console.WriteLine($"{c} {output}"); } } static void ColumnProcess()
{ }
static void JoinTableProcess()
{ }
static void FromTableProcess()
{ } }
}
解析SQL中的包含的列和表的更多相关文章
- 高并发分布式系统中生成全局唯一(订单号)Id js返回上一页并刷新、返回上一页、自动刷新页面 父页面操作嵌套iframe子页面的HTML标签元素 .net判断System.Data.DataRow中是否包含某列 .Net使用system.Security.Cryptography.RNGCryptoServiceProvider类与System.Random类生成随机数
高并发分布式系统中生成全局唯一(订单号)Id 1.GUID数据因毫无规律可言造成索引效率低下,影响了系统的性能,那么通过组合的方式,保留GUID的10个字节,用另6个字节表示GUID生成的时间(D ...
- sql中的行转列和列转行的问题
sql中的行转列和列转行的问题 这是一个常见的问题,也是一个考的问题 1.行转列的问题 简单实例 CREATE TABLE #T ( MON1 INT, MON2 INT, MON3 INT ) G ...
- mysql中,创建包含json数据类型的表?创建json表时候的注意事项?查询json字段中某个key的值?
需求描述: 在mysql数据库中,创建包含json数据类型的表.记录下,在创建的过程中,需要注意的问题. 操作过程: 1.通过以下的语句,创建包含json数据类型的表 mysql> create ...
- MySQL 查询某个数据库中所有包含数据记录的表名
MySQL 查询某个数据库中所有包含数据记录的表名 有时根据实际应用需要,需要对数据进行备份. 如果一个数据库中有很多数据表,但是只想备份包含数据记录的那些表数据(空表不做数据备份). 如果通过如下S ...
- 解析sql中的表名
最近的项目需求中需要解析sql得表名,由于只需要表名我觉得应该用相对粗暴一点的方式来解析 初步思路: 1.转义字符:去除两个引号连在一起的 2.字符串: 去除所有被引号包裹的 3.括号:识别括号处理 ...
- SQL中对于两个不同的表中的属性取差集except运算
SQL中对两个集合取差集运算,使用except关键字,语法格式如下: SELECT column_name(s) FROM table_name1 EXCEPT SELECT column_name( ...
- SQL中哪些情况会引起全表扫描
1.模糊查询效率很低:原因:like本身效率就比较低,应该尽量避免查询条件使用like:对于like '%...%'(全模糊)这样的条件,是无法使用索引的,全表扫描自然效率很低:另外,由于匹配算法的关 ...
- SQL中如何修改数据库名、表名、列名?
文章目录 1.SQL中如何修改数据库的名字? 2.SQL中如何修改表的名字? 3.SQL中如何修改列的名字? 4.SQL中如何修改列的数据类型?(未完成,待续) 1.SQL中如何修改数据库名? 语法 ...
- 查询SQL中某表里有多少列包含某字段
select c.name from SYSCOLUMNS as c left join SYSOBJECTS as t on c.id=t.id where c.name like '这里是某个字段 ...
随机推荐
- BZOJ 3926 [Zjoi2015]诸神眷顾的幻想乡 ——广义后缀自动机
神奇的性质,叶子节点不超过20个. 然后把这些节点提出来构成一颗新树,那么这些树恰好包含了所有的情况. 所以直接广义后缀自动机. 然后统计本质不同的字符串就很简单显然了. #include <c ...
- BZOJ 3747: [POI2015]Kinoman 【线段树】
Description 共有m部电影,编号为1~m,第i部电影的好看值为w[i]. 在n天之中(从1~n编号)每天会放映一部电影,第i天放映的是第f[i]部. 你可以选择l,r(1<=l< ...
- 雅礼培训 Problem B 【图论 + 贪心】
题意 A和B在树上轮流选点,记A的联通块个数为\(x\),B的联通块个数为\(y\) A使\(x - y\)最大,B使\(x - y\) 二人采取最优策略,求\(x-y\) 题解 树联通块个数 = 点 ...
- BZOJ3130 [Sdoi2013]费用流 【网络流 + 二分】
题目 Alice和Bob在图论课程上学习了最大流和最小费用最大流的相关知识. 最大流问题:给定一张有向图表示运输网络,一个源点S和一个汇点T,每条边都有最大流量.一个合法的网络流方案必须满足:(1)每 ...
- Debian9初始配置
1 进入root用户 su root 2 修改镜像源:编辑/etc/apt/sources.list文件 nano /etc/apt/sources.list 修改内容如下: deb http://m ...
- SpringBoot中mybatis的自动生成
1.在pom文件中加入自动生成的插件 <!-- mybatis generator 自动生成代码插件 --> <plugin> <groupId>org.mybat ...
- Spring的Bean定义
以下内容引用自http://wiki.jikexueyuan.com/project/spring/bean-definition.html: Bean定义 被称作bean的对象是构成应用程序的支柱也 ...
- aSmack连接server异常smack.SmackException$ ConnectionException thrown by XMPPConnection.connect();
以下是我在研究asmack4.0出现的异常 06-17 12:02:56.924: W/System.err(10622): org.jivesoftware.smack.SmackException ...
- Solidworks如何创建投影曲线
画好草图之后(草图是在上视基准面上画的)然后点击曲线,投影曲线 面选择要投影的曲面,然后就得到了平面曲线在曲面上的投影得到的空间曲线 注意这种方法对于开环轮廓也是可以用的,比如下面,我定义一个 ...
- 零售连锁行业SOA化解决方式
零售连锁行业面临的问题 1.店铺老化.营销手段单一落后. 2.管理模式的不科学,我国零售企业在起家时候并没有一套完好的科学的管理及考评系统的存在.而且在企业的发展过程中并未学习建立.对于人才的吸引.培 ...