使用 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
我手头没有您的用例的确切示例。
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
我手头没有您的用例的确切示例。