如何使用Microsoft.SqlServer.Management.SqlParser中的类将T-SQL解析为AST

Bar*_*Mao 5 c# t-sql sql-server

Parser仅具有返回ParseResult的Parse方法,似乎我无法使用ParseResult做任何事情。如何获得sql语句的抽象语法树,或者仅可以从sql解析元数据标记就可以了。

Bar*_*Mao 4

我做了一些研究,发现我可以使用反射来使用SqlScript.WriteXml生成解析的信息 xml 文件。这是示例代码,不知道是否有更好的方法。

var rst = Parser.Parse(File.ReadAllText(@"*.sql"));
var fieldInfo = rst.GetType().GetField("sqlScript", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField);
var script = fieldInfo.GetValue(rst);
var writer = XmlWriter.Create("*.xml");
script.GetType().InvokeMember("WriteXml", BindingFlags.NonPublic| BindingFlags.Instance | BindingFlags.InvokeMethod
    , null, script, new object[] { writer });
writer.Close();
Run Code Online (Sandbox Code Playgroud)