使用MS的ScriptDom来拆解TSQL脚本
此处提供9.1.40413.0版本的DLL一共4个:Microsoft.Data.Schema.dll、Microsoft.Data.Schema.ScriptDom.dll、Microsoft.Data.Schema.ScriptDom.Sql.dll、Microsoft.Data.Schema.Sql.dll。传送:https://pan.baidu.com/s/1geOH7qz
废话不多说,直接上代码:
public static IEnumerable<string> ParserInternal(TextReader reader)
{
var parser = new TSql100Parser(false);
var errors = new List<ParseError>();
var tokens = parser.GetTokenStream(reader, errors);
if (errors.Count > 0)
{
var sbError = new StringBuilder();
sbError.AppendLine("SQL Script Parse Failed!");
foreach (var error in errors)
{
sbError.AppendLine($"\tLine:{error.Line} Column:{error.Column} Error:{error.Message}");
}
throw new InvalidDataException(sbError.ToString());
}
var isSkip = true;
var sbScript = new StringBuilder();
foreach (var token in tokens)
{
switch (token.TokenType)
{
case TSqlTokenType.SingleLineComment:
case TSqlTokenType.MultilineComment:
case TSqlTokenType.WhiteSpace:
sbScript.Append(token.Text);
break;
case TSqlTokenType.Go:
if (!isSkip)
{
isSkip = true;
yield return sbScript.ToString();
}
sbScript = new StringBuilder();
break;
default:
isSkip = false;
sbScript.Append(token.Text);
break;
}
}
if (sbScript.Length > 0)
yield return sbScript.ToString();
}
使用MS的ScriptDom来拆解TSQL脚本的更多相关文章
- MS SQL 日常维护管理常用脚本(二)
监控数据库运行 下面是整理.收集监控数据库运行的一些常用脚本,也是MS SQL 日常维护管理常用脚本(一)的续集,欢迎大家补充.提意见. 查看数据库登录名信息 Code Snippet SELEC ...
- MSSQL-Scripter,一个新的生成T-SQL脚本的SQL Server命令行工具
这里向大家介绍一个新的生成T-SQL脚本的SQL Server命令行工具:mssql-scripter.它支持在SQL Server.Azure SQL DB以及Azure SQL DW中为数据库生成 ...
- SSISDB5:使用TSQL脚本执行Package
SSISDB 系列随笔汇总: SSISDB1:使用SSISDB管理Package SSISDB2:SSIS工程的操作实例 SSISDB3:Package的执行实例 SSISDB4:当前正在运行的Pac ...
- sql server t-sql脚本转成oracle plsql
将一份SQL SERVER数据库生成的T-SQL脚本,转成ORACLE的PL/SQL,其复杂繁琐程度,远远出乎我的意料. 这份SQL SERVER脚本,里面有表,有视图,还有存储过程,以及一些自定义函 ...
- 监控数据库运行 - MS SQL 日常维护管理常用脚本(二)
查看数据库登录名信息 use mastergoSELECT name AS LoginName , dbname AS DefaultDB , createdate AS CreateDate, up ...
- T-SQL 脚本
1.USE语句 USE语句用于设置当前数据库,如果没有USE语句,那么就由执行脚本的任何用户来确定执行脚本时当前数据库是正确的.如果只是一个通用脚本,那么省去USE语句实际上可能更有益.通常,如果在脚 ...
- sql2012包含数据库,快速生成用户tsql脚本
今天太忙(下班时,发现一个考试网站的不算BUG的BUG,这个BUG刚好能让我找到想要的数据,现在正辛苦的编码中...) 不多说,今天的技术文章,简单一点,帖一段昨天写的SQL代码 用于SQL2012中 ...
- MS SQL 日常维护管理常用脚本
--[查看数据库服务器名称] --默认实例查询 SELECT @@SERVERNAME AS SERVERNAME; SELECT SERVERPROPERTY('servername') AS Se ...
- T-sql脚本规范
一.创建表 IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'表名') AND type in (N'U') ...
随机推荐
- Sourcetree报错: 您没有已经配置扩展集成设置的远端
一.错误提示 您没有已经配置扩展集成设置的远端; ... 二.解决 配置 Legacy Account Settings 即可:
- Implementation:Dijkstra
#include <iostream> #include <cstdlib> #include <utility> #include <queue> u ...
- SQL索引的优缺点
--索引的优点 /* (1)创建唯一索引,保证数据库表中每一行数据的唯一性 (2)大大加速数据的检索速度,这也是创建索引的最主要的原因 (3)加速表和表至今的连接,特别是在实现数据的参考完整性特别有意 ...
- js-权威指南学习笔记13
第十三章 Web浏览器中的JavaScript 1.在客户端JS中,window对象也是全局对象. 2.window对象中其中一个最重要的属性是document,它引用Document对象. 3.JS ...
- vue组件 订单支付15分钟倒计时
//支付倒计时 ComputetTime(data) { let st = data.currentTime.replace(/\-/g, "/"),//当前服务器时间 ct = ...
- MVP+Dagger2+Rxjava+Retrofit+GreenDao 小应用,包含新闻、图片、视频3个大模块,代码整洁干练
练习MVP架构开发的App,算是对自己学过的知识做一个总结,做了有一段时间,界面还算挺多的,代码量还是有的,里面做了大量封装,整体代码整理得很干净,这个我已经尽力整理了.不管是文件(Java.xml. ...
- Listview点击已读使用getBadgeView标示
重:每个ListItem是属于ListItem自己的,不能够放到ViewHolder中,而是数据源每项的. @Override public View getView(int position, Vi ...
- redis 集群目标、集群查看、配置方法及过程、哨兵配置启动
集群目标 主从复制,读写分离:故障切换(通过哨兵实现) 查看集群状态 info replication 配置方法 只设置从数据库就可以了:最佳实践,在主数据库配置masterauth <mast ...
- for循环内嵌套finally使用的意外获得
在for循环中有continue和break,无论执行continue还是break finally的逻辑都会执行,原本以为是不执行的 格式 for (int i = 0; i < 3; i ...
- 团队项目个人进展——Day01
一.昨天工作总结 冲刺第一天,昨天阅读了小程序官方文档关于对视图层和逻辑层的介绍 二.遇到的问题 对小程序的样式文件——WXML里的标签不太理解,相比之下,html的标签更能让人接受 三.今日工作规划 ...