使用MS的ScriptDom来拆解TSQL脚本
Posted 许海彪
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用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($" Line:{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脚本的主要内容,如果未能解决你的问题,请参考以下文章
powershell MS SQL Powershell使用TSQL创建表
为啥我可以使用 tsql 而不是 pymssql 连接到 Azure MS SQL?