Использовать отсюда версию .net, чтобы сэкономить много времени и усилий?
парсеры SQL для .net
Должен признать, я не говорю отопыт работы с этими парсерами, но я сталкиваюсь с подобными проблемами, которые возникали у людей с парсингом HTML / CSS, когда они использовали регулярные выражения (в том числе и меня, когда моложе) вместо парсера.
Это намного более читабельно, менее подвержено ошибкам, проще в отладке или обслуживании и занимает меньше общего времени, если вы применяете подход парсера.
Например:
TGSqlParser sqlparser = new TGSqlParser(EDbVendor.dbvmysql);
sqlparser.sqltext = "ALTER TABLE `world`.`t1` ALTER `c1` SET DEFAULT 'abc';";
Assert.IsTrue(sqlparser.parse() == 0);
TAlterTableStatement alterTableStatement = (TAlterTableStatement)sqlparser.sqlstatements.get(0);
TAlterTableOption alterTableOption = alterTableStatement.AlterTableOptionList.getAlterTableOption(0);
Assert.IsTrue(alterTableOption.OptionType == EAlterTableOptionType.AlterColumn);
Assert.IsTrue(alterTableOption.DefaultExpr.ToString().Equals("'abc'", StringComparison.CurrentCultureIgnoreCase));
Показывает, как успешно извлечь значение DEFAULT из оператора alter table:
"ALTER TABLE `world`.`t1` ALTER `c1` SET DEFAULT 'abc';";
Я уверен, что вы можете сделать что-то похожее с вашими операторами, просто передайте любую строку, которую вы анализируете, вместо жестко закодированного текста.
Я сожалею, что это не полный (на блюде, копировать-вставить) тип ответа, я бы добавил это в комментарий, если бы думал, что это будет хорошо продемонстрировано.Надеюсь, таким образом, когда вы увидите простоту этого, вы передумаете.
Я никоим образом не связан с автором, и я не рекомендую использовать это, если вы найдете то, что подходит вам лучшевсе, что я хочу сказать, это использовать этот ПОДХОД и продемонстрировать его в действии.