Выполнение 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;
Это объясняется в документации.