Выполнение SQL Script с использованием OSQL не возвращает код результата

Я выполняю некоторые SQL-запросы, используя OSQL через настройку inno. Я использую следующий код для запуска OSQL, Это только для примера

SQLQuery:= '"EXEC sp_addserver ''PCNAME'';"';
Param:= '-S(local) -Usa -Psa -Q ' + SQLQuery;
Exec('osql.exe', Param, '', SW_HIDE, ewWaitUntilTerminated, ResultCode);

Это отлично работает. Проблема в ResultCode значение всегда равно 0. Даже если запрос не выполняется. Например, если я пытаюсь выполнить тот же запрос, как показано ниже, где я передаю неверное имя хранимой процедуры, ResultCode все еще 0.

SQLQuery:= '"EXEC sp_invalidname ''PCNAME'';"';
Param:= '-S(local) -Usa -Psa -Q ' + SQLQuery;
Exec('osql.exe', Param, '', SW_HIDE, ewWaitUntilTerminated, ResultCode);

Почему бы не вернуть мне правильный код. Если я запускаю второй запрос в Management Studio, я получаю такую ​​ошибку

Msg 2812, Level 16, State 62, Line 1 Could not find stored procedure 'sp_invalidname'

Здесь код возврата 2812, Почему я не получаю это, когда я прохожу через Inno. Что мне нужно сделать, чтобы получить этот код ошибки в Inno?

1 ответ

Благодаря TLama я обновил свой код, как показано ниже, и теперь он работает. Я должен был добавить -b параметр командной строки, и теперь он возвращает 1, если команда не выполняется.

-b Указывает, что osql завершает работу и возвращает значение DOS ERRORLEVEL при возникновении ошибки. Значение, возвращаемое переменной DOS ERRORLEVEL, равно 1, если сообщение об ошибке SQL Server имеет серьезность 11 или выше; в противном случае возвращаемое значение равно 0. Пакетные файлы Microsoft MS-DOS могут проверить значение DOS ERRORLEVEL и соответствующим образом обработать ошибку.

Я обновил свой код, как показано ниже.

Param:= '-S(local) -Usa -Psa -b -Q ' + SQLQuery;

Это объясняется в документации.

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