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中的包含的列和表的更多相关文章

  1. 高并发分布式系统中生成全局唯一(订单号)Id js返回上一页并刷新、返回上一页、自动刷新页面 父页面操作嵌套iframe子页面的HTML标签元素 .net判断System.Data.DataRow中是否包含某列 .Net使用system.Security.Cryptography.RNGCryptoServiceProvider类与System.Random类生成随机数

    高并发分布式系统中生成全局唯一(订单号)Id   1.GUID数据因毫无规律可言造成索引效率低下,影响了系统的性能,那么通过组合的方式,保留GUID的10个字节,用另6个字节表示GUID生成的时间(D ...

  2. sql中的行转列和列转行的问题

    sql中的行转列和列转行的问题 这是一个常见的问题,也是一个考的问题 1.行转列的问题  简单实例 CREATE TABLE #T ( MON1 INT, MON2 INT, MON3 INT ) G ...

  3. mysql中,创建包含json数据类型的表?创建json表时候的注意事项?查询json字段中某个key的值?

    需求描述: 在mysql数据库中,创建包含json数据类型的表.记录下,在创建的过程中,需要注意的问题. 操作过程: 1.通过以下的语句,创建包含json数据类型的表 mysql> create ...

  4. MySQL 查询某个数据库中所有包含数据记录的表名

    MySQL 查询某个数据库中所有包含数据记录的表名 有时根据实际应用需要,需要对数据进行备份. 如果一个数据库中有很多数据表,但是只想备份包含数据记录的那些表数据(空表不做数据备份). 如果通过如下S ...

  5. 解析sql中的表名

    最近的项目需求中需要解析sql得表名,由于只需要表名我觉得应该用相对粗暴一点的方式来解析 初步思路: 1.转义字符:去除两个引号连在一起的 2.字符串: 去除所有被引号包裹的 3.括号:识别括号处理 ...

  6. SQL中对于两个不同的表中的属性取差集except运算

    SQL中对两个集合取差集运算,使用except关键字,语法格式如下: SELECT column_name(s) FROM table_name1 EXCEPT SELECT column_name( ...

  7. SQL中哪些情况会引起全表扫描

    1.模糊查询效率很低:原因:like本身效率就比较低,应该尽量避免查询条件使用like:对于like '%...%'(全模糊)这样的条件,是无法使用索引的,全表扫描自然效率很低:另外,由于匹配算法的关 ...

  8. SQL中如何修改数据库名、表名、列名?

    文章目录 1.SQL中如何修改数据库的名字? 2.SQL中如何修改表的名字? 3.SQL中如何修改列的名字? 4.SQL中如何修改列的数据类型?(未完成,待续) 1.SQL中如何修改数据库名? 语法 ...

  9. 查询SQL中某表里有多少列包含某字段

    select c.name from SYSCOLUMNS as c left join SYSOBJECTS as t on c.id=t.id where c.name like '这里是某个字段 ...

随机推荐

  1. 【Luogu】P2340奶牛会展

    题目链接 突发奇想可以用f[i]表示智商和为i的时候情商最大是多少.这样就变成了一个背包问题. 最后更新答案的时候从0到最大背包容量遍历,最后答案是最大的i+f[i]; 但是虽然答案只能从0到m里选, ...

  2. EC++学习笔记(三) 资源管理

    条款13:以对象管理资源 资源包括:动态分配内存.文件描述符.网络socket.互斥锁.数据库连接 把资源放进对象内,可以依赖c++的"析构函数自动调用机制"确保资源被释放智能指针 ...

  3. SpringBoot项目整合Druid进行统计监控

    0.druid介绍,参考官网 1.在项目的POM文件中添加alibaba的druid依赖 <dependency> <groupId>com.alibaba</group ...

  4. PatentTips - Optimizing Write Combining Performance

    BACKGROUND OF THE INVENTION The use of a cache memory with a processor facilitates the reduction of ...

  5. android获取手机号

    private String getPhoneNum(){ //与手机建立连接 TelephonyManager tm = (TelephonyManager)getSystemService(Con ...

  6. js等待提示通用类

    function WaitingTip (options){       if(!options){                options = {                contain ...

  7. Mac OS X 下安装python的MySQLdb模块

    参考资料: mac os x下python安装MySQLdb模块   http://www.codeif.com/post/1073/ MAC OSX使用Python安装模块有关问题  http:// ...

  8. webstorm(三):webstorm的一些waring提示

    一.Attribute key is not allowed here 二.Comparison this.loginType != 'username' may cause unexpected t ...

  9. 洛谷—— P2656 采蘑菇

    https://www.luogu.org/problem/show?pid=2656 题目描述 小胖和ZYR要去ESQMS森林采蘑菇. ESQMS森林间有N个小树丛,M条小径,每条小径都是单向的,连 ...

  10. Jetson TK1 五:移植工控机程序到板上

    1.gazebo xml 2.王 chmod 777 chmod 777 /home/robot2/bzrobot_ws/src/bzrobot/bzrobot_control/bzrobot_con ...