Привет, я использую синтаксический анализатор Microsoft ScriptDOM (Microsoft.SqlServer.TransactSql.ScriptDom) для анализа SQL-запросов.
Для принятия решений в моей логике я хочу знать все имена таблиц и их псевдонимы в SQL. строка оператора (по сути, оператор MERGE sql)
В приведенном ниже sql я хочу извлечь имя и псевдоним таблицы и сохранить их в словаре следующим образом:
[key: t_dpatch_parent , значение: a]
[key: t_dpatch_child , значение: b]
MERGE INTO t_dpatch_parent a
USING t_dpatch_child b
ON (a.student_id = b.student_id)
WHEN MATCHED THEN
UPDATE SET a.Proposed_Fee = b.collage_fee
Я использовал этот код, но он дает псевдоним: null для таблицы: t_dpatch_parent. В этом случае следует добавить псевдоним: a
class TableAliasVisitor : TSqlFragmentVisitor
{
private readonly Dictionary _tableAliases = new Dictionary();
public Dictionary TableAliases
{
get { return _tableAliases; }
}
public override void Visit(NamedTableReference node)
{
string tableName = node.SchemaObject.BaseIdentifier.Value;
string tableAlias = node.Alias?.Value;
_tableAliases[tableName] = tableAlias;
base.Visit(node);
}
}
Подробнее здесь: https://stackoverflow.com/questions/777 ... om-library