【发布时间】:2015-04-09 21:15:17
【问题描述】:
我正在使用 SQLCMD 来获取表中的行数,但我也想知道查询是否遇到错误。
我正在使用的 sqlcmd 如下所示:
sqlcmd -S %server% -U %user% -P %pass% -b -Q "select count(*) from %table%"
如果有效,它将返回:
-----------
10205
(1 rows affected)
(请注意,我没有指定的列名--------上方有一个空行。)
如果我传入一个不存在的表,我会得到以下响应:
Msg 208, Level 16, State 1, Server devServer, Line 1
Invalid object name 'dbo.no_table'.
由于我有 -b 标志,我可以检查 ERRORLEVEL 的值(在本例中为 1)。
为了存储计数变量,我一直在使用以下行:
for /F %%i in ('sqlcmd -S %server% -U %user% -P %pass% -b -Q "select count(*) from %table%" ^| findstr /r "[^(][0-9]"') do SET /a rec_count=%%i
在for之后,%errorlevel%返回0。即使在do里面,errorlevel也是0。
有什么简单的方法可以运行sqlcmd,如果没有错误则存储计数,如果有错误则打印两行?
【问题讨论】:
-
如果这是一个新项目,我完全同意。不幸的是,我只是想为现有的批处理文件添加一个计数。
-
我假设您是说
errorlevel没有被更改 - 即使表格无效? -
是的,没错。如果在 for 循环中运行,Errorlevel 不变,但如果在 for 之外运行,则它会更改。
标签: sql-server batch-file sqlcmd