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. [BZOJ1579] [Usaco2009 Feb]Revamping Trails 道路升级(分层图最短路 + 堆优化dijk)

    传送门 dis[i][j]表示第i个点,更新了j次的最短路 此题不良心,卡spfa #include <queue> #include <cstdio> #include &l ...

  2. P1026 统计单词个数 (动态规划)

    题目描述 给出一个长度不超过200的由小写英文字母组成的字母串(约定;该字串以每行20个字母的方式输入,且保证每行一定为20个).要求将此字母串分成k份(1<k<=40),且每份中包含的单 ...

  3. FreeMarker常用语法学习

    1.API网址 http://freemarker.sourceforge.net/docs/ 2.一个Table的例子 freemarker 对表格的控制 这里将所有需要在一个区域显示到数据全部ad ...

  4. Spring-IOC源码解读2-容器的初始化过程

    1. IOC容器的初始化过程:IOC容器的初始化由refresh()方法启动,这个启动包括:BeanDifinition的Resource定位,加载和注册三个过程.初始化的过程不包含Bean依赖注入的 ...

  5. POJ2486 Apple Tree

    Time Limit: 1000MS   Memory Limit: 65536KB   64bit IO Format: %lld & %llu Description Wshxzt is ...

  6. java多线程总结一:线程的两种创建方式及比较

    1.线程的概念:线程(thread)是指一个任务从头至尾的执行流,线程提供一个运行任务的机制,对于java而言,一个程序中可以并发的执行多个线程,这些线程可以在多处理器系统上同时运行.当程序作为一个应 ...

  7. 标准C程序设计七---11

    Linux应用             编程深入            语言编程 标准C程序设计七---经典C11程序设计    以下内容为阅读:    <标准C程序设计>(第7版) 作者 ...

  8. PHP输出控制函数(ob系列函数)

    PHP输出控制函数(ob系列函数) flush — 刷新输出缓冲ob_clean — 清空(擦掉)输出缓冲区ob_end_clean — 清空(擦除)缓冲区并关闭输出缓冲ob_end_flush — ...

  9. 自定义header参数时的命名要求

    HTTP头是可以包含英文字母([A-Za-z]).数字([0-9]).连接号(-)hyphens, 也可义是下划线(_).在使用nginx的时候应该避免使用包含下划线的HTTP头.主要的原因有以下2点 ...

  10. (47)C#运行时序列化

    序列化是将对象或对象图转化成字节流的过程.反序列化是将字节流转换回对象图的过程.