使用OSQL执行SQL脚本不返回结果代码

时间:2015-03-05 14:38:50

标签: installation inno-setup osql

我通过inno setup使用OSQL执行一些sql查询。我使用以下代码来运行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);

为什么不给我一个正确的代码。如果我在管理工作室中运行第二个查询,我会收到类似这样的错误

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

此处返回代码为2812。当我通过inno运行它时,为什么不能得到它。我需要做什么才能在inno中获取此错误代码?

1 个答案:

答案 0 :(得分:2)

感谢TLama,我更新了我的代码,现在正在运行。我不得不添加-b命令行参数,现在如果命令失败则返回1.

  

-b   指定osql退出并在发生错误时返回DOS ERRORLEVEL值。当SQL Server错误消息的严重性为11或更高时,返回到DOS ERRORLEVEL变量的值为1;否则,返回的值为0. Microsoft MS-DOS批处理文件可以测试DOS ERRORLEVEL的值并适当地处理错误。

我更新了我的代码,如下所示。

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

documentation中解释。