解析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 '这里是某个字段 ...
随机推荐
- linux虚拟机无法上网 Network is unreachable
系统centos 安装ftp时报错 Couldn't resolve host 'mirrorlist.centos.org [root@wulihua bin]# yum install vsft ...
- Android借助Handler,实现ViewPager中页面的自动切换(转)
在很多电商网页及app上都有自动切换的商品的推广快,感觉体验挺不错的,正好今天学习使用ViewPager,因此也实现了一个功能类似的demo. 下面是其中的两个截图: 实现一个自动 ...
- (8)C#连sqlserver
str="Data Source=ip; Network Library=DBMSSOCN; Initial Catalog=数据库; User ID=sa; Password=xx&quo ...
- UVA11825 Hackers' Crackdown
题目描述 PDF 输入输出格式 输入格式: 输出格式: 输入输出样例 输入样例#1: 3 2 1 2 2 0 2 2 0 1 4 1 1 1 0 1 3 1 2 0 输出样例#1: Case 1: 3 ...
- File类 文件过滤器
创建过滤器 package cn.zmh.File; import java.io.File; import java.io.FileFilter; // 实现FileFilter类的功能 publi ...
- 多个Nginx如何实现集群(没具体方案,只是初步探究)
场景: Nginx+Web服务器可以实现负载均衡,但是一台Nginx也是有限的,如果并非量高的话,在他的上层如何实现负载均衡. 如果是DNS或者CDN的话,建多个机房,势必有多个机房数据同步的问题. ...
- Maven打包时过滤测试代码或指定特定的测试类(maven-surefire-plugin)
1.过滤整个测试代码,可以直接在命令行上指定 mvn clean install -Dmaven.test.skip=true 提示:以上为举例,具体的构建阶段可以自定义,其中maven.test.s ...
- C/C++二进制读写png文件
以下代码只有最简单的读写.地址定位啥的,个别注释中有.如果要改动png的格式甚么的就要再了解一下png的数据结构如果要十进制的话就跟着注释改一下: /*! * \file CC++二进制读写png文件 ...
- Elasticsearch shield权限管理详解
Elasticsearch shield权限管理详解 学习了:https://blog.csdn.net/napoay/article/details/52201558 现在(20180424)改名为 ...
- Android Studio——gradle同步出错:MALFORMED
Android Studio之前使用本地的gradle-2.10,而后创建新的工程总是报错,信息如下: Gradle sync failed: MALFORMED 而后在File->Projec ...