使用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?

powershell MS SQL Powershell使用本机TSQL创建数据库

TSQL 等效于 MS Access 交叉表查询

TSQL 查询可以使用访问表单中的值吗?

如何知道TSQL语句已经运行了多久