SQL 格式化工具 V.1
来源:互联网 发布:杭州算法工程师招聘 编辑:程序博客网 时间:2024/05/23 21:01
最近在做公司的查询平台,要抓以前旧的SQL语句。用VS抓出来的语句经常是一些没有分段的一连串的SQL,复制到SQL SERVER 2008后还要自己分段,相当麻烦。于是就有了写一个简单的SQL格式化工具的想法。
我的实现思路很简单:
1 设置一个SQL语句每一段的长度值,超过这个长度值的时候就给他增加一个分段符。
代码:
public partial class Form1 : Form { //用于标记切割时的开始位置 int stratNum=0; string temp; //设置格式化后每一段SQL语句的长度值 int length = 40; StringBuilder sb; public Form1() { InitializeComponent(); } private void btnFormat_Click(object sender, EventArgs e) { try { //字符长度 label1.Text = Convert.ToString(tbSourceSql.Text.Length); sb = new StringBuilder(); while (stratNum <= (tbSourceSql.Text.Length)) { //判断是否到最后一行 if ((tbSourceSql.Text.Length - stratNum) > length) { //判断结尾是否为空字符串或标点 temp = tbSourceSql.Text.Substring(stratNum, length); // 如果不是以“ ”或“,”结尾,则重新截取 while(!(temp.EndsWith(" ") || temp.EndsWith(","))) { length++; temp = tbSourceSql.Text.Substring(stratNum, length); } stratNum += length; } else { temp = tbSourceSql.Text.Substring(stratNum); stratNum += length; } sb.Append(temp + Environment.NewLine); } tbFormatSql.Text = sb.ToString(); MessageBox.Show("Format Success."); } catch (Exception ex) { throw new Exception(ex.Message); } finally { stratNum = 0; sb = null; } } }
实现语句相当简单,但好像效果不是很好。因为有些会行会超出设置的长度。以后再细查原因。
效果:
需要分割的SQL语句:
SELECT distinct PLActorRight.*,PLMenuItem.PLMenuName,PLMenuItem.PLMenuStep,PLMenuItem.PLMenuValue,PLMenuItem.PLSystemID,PLMenuItem.PLAssemblyName,PLMenuItem.PLClassName,PLActorIDSystemID=PLMenuItem.PLSystemID*100000 + PLActorRight.PLActorID FROM PLActorRight LEFT JOIN PLMenuItem ON PLMenuItem.PLMenuID=PLActorRight.PLMenuID WHERE PLActorID IN (SELECT PLActorID FROM PLUserActor WHERE <<PLUserID ={0}>> AND PLActorRight.PLEnabledFlag=1 AND PLActorRight.PLShowFlag=1)
格式化后效果图:
2 设置几个SQL的关键字。遇到关键字就分段。
代码:
public partial class Form1 : Form { //分割字段 string[] keyString = new string[] { "FROM", "LEFT JOIN", "RIGHT JOIN", "INNER JOIN", "ORDER BY", "GROUP BY", "SELECT", "UNION ALL" }; public Form1() { InitializeComponent(); } /// <summary> /// 给关键字加分割符 /// </summary> /// <param name="oldString"></param> /// <returns></returns> private string[] GetNewString(string[] oldString) { string[] newString = new string[oldString.Length]; for (int i = 0; i < newString.Length; i++) { newString[i] +=oldString[i]+ Environment.NewLine; } return newString; } private void btnFormat2_Click(object sender, EventArgs e) { string sourceSql = this.tbSourceSql.Text; string reString= ReplaceStrings(sourceSql, keyString, GetNewString(keyString)); this.tbFormatSql.Text = reString.ToString(); } private string ReplaceStrings(string str,string[] oldStrings,string[] newStrings) { //Length取数据长度较短的那个 string reString = string.Empty; int length = oldStrings.Length > newStrings.Length ? newStrings.Length : oldStrings.Length; for (int i = 0; i < length; i++) { string tempString = string.Empty; //替换 tempString = str.Replace(oldStrings[i], newStrings[i]); str = tempString; } return str; } }
同样的原SQL代码,分割后效果图:
两个都是很粗略的方法,要想做出格式很好的SQL语句,还有很多要做。比如方法2中最好加一个长度限定,要了一定长度后自动分割。以及自动维护分割的关键字等。
- SQL 格式化工具 V.1
- SQL格式化工具
- sql格式化工具
- sql语句格式化工具
- 自动格式化SQL工具推荐
- 一个免费在线SQL格式化工具
- 开发辅助工具:SQL文格式化工具SQLinFormpro_Desktop
- 推荐一款T-SQL代码格式化工具
- sql servlet 常用的时间格式化工具
- v$sqltext,v$sql
- v$sql v$sql_plan
- 非常好的SQL格式化工具SQL Pretty Printer
- 推荐一款免费的SQL脚本格式化工具--SQLinForm
- 推荐一款免费的SQL脚本格式化工具--SQLinForm
- 推荐一款免费的SQL脚本规范格式化工具--SQLinForm
- Sublime Text3必备插件:SQL格式化工具(SqlBeautifier)
- v$sql,v$sqlarea,v$sqltext区别
- v$sqltext,v$sql,v$sqlarea 区别
- linux下mmap()函数
- JAVA中Math类的random()方法使用
- 忠告
- PSNRStatic 阅读
- Interpolator,动画添加器的详细动作说明
- SQL 格式化工具 V.1
- Vector用法
- vi使用手册
- [探讨java深入的不变模式] java中String类的用法
- c++编程思想2 --友元存储控制
- 编程经验记录
- java操作mongodb实例
- Linux常用命令使用方法大搜刮
- 显示透明图片的方法汇总