ParseStatementList не работает с допустимым оператором SQL - PullRequest
1 голос
/ 16 апреля 2009

Я пытаюсь использовать метод TSql100Parser.ParseStatementList для программного анализа операторов SQL и извлечения имен объектов. Это из пространства имен Microsoft.Data.Schema.ScriptDom.Sql. Вот код:

string sql = "CREATE VIEW testView AS SELECT * from testTable";
var parser = new TSql100Parser(false);
StatementList parsedStatements; IList errrors;

using (TextReader reader = new StringReader(sql)) 
{ 
       parsedStatements = parser.ParseStatementList(reader, out errors);
}

Метод ParseStatementList возвращает значение NULL и вставляет две ошибки в список ошибок. Это ошибки «Недопустимый синтаксис рядом с CREATE» и «Недопустимый синтаксис рядом с VIEW». Это странно, потому что тот же оператор sql успешно проанализирован методом TSql100.Parse. Также странно, что приведенный выше код успешно анализирует SQL «DROP VIEW testView»

Любые идеи, почему он не будет анализировать мое представление создание sql? Спасибо!

1 Ответ

1 голос
/ 23 февраля 2010

ParseStatementList используется для синтаксического анализа операторов, которые могут быть в пакете или в теле хранимой процедуры. Операторы типа CREATE VIEW (а также CREATE / ALTER proc, триггер, функция и т. Д.). должен быть единственным оператором в пакете и, следовательно, не может содержаться внутри любого другого типа StatementList. Эти операторы будут анализироваться только в правилах грамматики для пакетов, поэтому ParseStatementList их не распознает.

Почему вы хотите использовать ParseStatementList вместо Parse или ParseBatch здесь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...