Как найти ошибку в скрипте с помощью 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