Как найти ошибку в скрипте с помощью Microsoft.SqlServer.TransactSql.ScriptDom

У меня есть SQL-скрипт X Select top 1 * from table. я использую MicrosoftSql.Smoчтобы проверить скрипт имеет ошибку или нет. Буква X неверна для сценария SQL. Но он не может найти ошибку в сценарии и оценивает ее как истинную. Как я могу решить эту проблему. Вместо использования GetTokenStream, я тоже использовал Parseметод. Ничего не изменилось.

      IList<ParseError> parseErrors;
TSql140Parser tsqlParser = new TSql140Parser(true);
IList<TSqlTokenStream> tStream;
using (StringReader stringReader = new StringReader(script))
            {
                tStream= (TSqlFragment)tsqlParser.GetTokenStream(stringReader, out parseErrors);
            }
if (parseErrors.Count > 0)
{
   var retMessage = string.Empty;
   foreach (var error in parseErrors)
   {
     throw new Exception("error in script")
   }
}
return (TSqlScript)fragment;

1 ответ

Это не грамматическая ошибка.

Сценарий

      X Select top 1 * from [table]

просто лечится так же, как

      EXEC X;

Select top 1 * from [table];

SQL Server допускает термин EXECбыть опущенным в первом операторе в пакете, поэтому он просто интерпретирует его, как вы пытаетесь выполнить хранимую процедуру, называемую X

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