В динамическом SQL ScriptDom находит операторы IF, но не операторы UPDATE.

Я использую TransactSQL.ScriptDom для анализа операторов SQL. У меня есть правила, в которых я хочу найти а) операторы IF и б) операторы UPDATE. Когда я просматриваю нединамический SQL, правила работают нормально. Однако, когда я просматриваю динамический SQL, мой код обнаруживает только блоки IF; он не обнаруживает операторы UPDATE.

Например, этот код попадает в отладчик как в нединамическом, так и в динамическом сценариях:

      public override void Visit(IfStatement ifStatement)
{
    ...
}

Однако этот код не попадает ни в один сценарий динамического SQL, и я также пробовал использовать UpdateSpecification:

      public override void Visit(UpdateStatement updateStatement)
{
    ...
}

Теперь, если я изменю код на Visit (тест TSqlFragment), код будет обработан, но я вижу только узел типа AsciiStringLiteral для моего оператора UPDATE. Есть ли лучший способ заставить мой код посетить оператор UPDATE?

1 ответ

Не обращайте внимания, это была ошибка пользователя. У меня был тип-o в моем динамическом SQL, где я неправильно использовал одинарные кавычки. Другими словами, я использовал это:

      @"EXEC('UPDATE dbo.MyTable
                SET MyColumn = 'MyValue';');",

... вместо этого:

      @"EXEC('UPDATE dbo.MyTable
                SET MyColumn = ''MyValue'';');",

(Я подумал об удалении этого вопроса вообще, но оставлю его на случай, если он поможет другим.)

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