使用 Microsoft.SqlServer.TransactSql.ScriptDom 生成查询

Generate a Query using Microsoft.SqlServer.TransactSql.ScriptDom

ScriptDom 的架构似乎很复杂。由于没有关于 ScriptDom 的文档,您知道如何使用 ScriptDom 类型生成这样的联合查询吗?

SELECT c.Title as ColumnTitle, t.Title as TableTitle, o.Title as OwnerTitle FROM info.iColumns c 
    JOIN info.iTables t ON c.TableRef = t.Id 
    JOIN info.iOwners o ON t.OwnerRef = o.Id 
    JOIN info.iTablesKey k ON k.TableRef = t.Id
    WHERE t.DisplayIndex = 1

我想为我的报表生成器创建一个简单的查询生成器,但我不知道如何构建 JOIN 语句。我检查了 this blog post 但生成的对象图 xml 非常复杂!

找出您需要添加的内容的最简单方法是执行相反的操作 - 从您的 t-sql 开始,使用解析器解析它并创建一个 TSqlScript,然后将其传递给 class 实现了 TSqlFragmentVisitor。

在实现 TSqlFragmentVisitor 的 class 中,对 Visit(TSqlScript 节点)进行覆盖 - 在那里放置一个断点,然后您可以探索构成查询的对象。

使用 ScriptDom 构建 AST 非常具有挑战性,但最终会有所收获 :)

有关如何使用 scriptdom 的示例,请参阅本文的 scriptdom 部分:

https://the.agilesql.club/Blogs/Ed-Elliott/DacFx-Create-tSQLt-Tests-From-A-Dacpac

我手头没有您的用例的确切示例。