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

本文关键字:查询 ScriptDom Transactionsql Microsoft SqlServer 使用 | 更新日期: 2023-09-27 17:57:26

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语句。我已经查看了这篇博客文章,但为对象图生成的xml非常复杂!

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

弄清楚需要添加什么的最简单方法是反向操作-从t-sql开始,使用解析器解析它并创建一个TSqlScript,然后将其传递给实现TSqlFragmentVisitor的类。

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

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

关于如何使用scriptdom的示例,请参阅以下内容的scriptdom部分:

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

我手头没有你的用例的确切例子。