Генерация запроса с использованием 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 заявления. Я проверил этот пост в блоге, но сгенерированный xml для графа объектов очень сложный!

1 ответ

Решение

Самый простой способ выяснить, что вам нужно добавить, - это сделать наоборот - начните с вашего t-sql, используйте синтаксический анализатор для его анализа и создайте TSqlScript, который вы затем передаете классу, который реализует TSqlFragmentVisitor.

В вашем классе, который реализует TSqlFragmentVisitor, выполните переопределение при посещении (узел TSqlScript) - установите точку останова, и затем вы сможете исследовать, какие объекты составляют ваш запрос.

Построение AST с использованием ScriptDom довольно сложно, но, в конце концов, полезно.

Например, о том, как использовать скриптдом, смотрите раздел скрипта этого:

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

У меня нет точного примера вашего варианта использования.

Другие вопросы по тегам