我正在尝试设置一个基本上针对数据库运行SQL语句的批处理脚本,如果脚本返回结果,它将遵循一些逻辑。
有没有办法让SQLCMD实际返回它找到的行数或类似的东西?
我看到我可以在屏幕或文件上显示输出,但是有没有办法让它把它放到变量中,所以我可以让脚本评估变量?例如:
SQLCMD -q "select count(*) from active_connections" -r @varactive
IF @varactive > 0 THEN
<do things>
ELSE END
或者我需要切换到Powershell来处理这种逻辑吗?
答案 0 :(得分:2)
虽然@Gary在技术上是正确的,返回的唯一内容是ERRORLEVEL,sqlcmd
也会将结果显示给STDOUT。有了这个,您可以在批处理文件中执行以下操作:
set SERVERNAME=yoursqlserver
for /f "skip=2" %%x in ('sqlcmd -S %SERVERNAME% -Q "select count(*) from active_connections" ^| findstr /v /c:"rows affected"') do set COUNT=%%x
echo There are %COUNT% records in the active_connections table.
答案 1 :(得分:0)
请参阅Docs for sqlcmd,您会看到很多您可能从未注意过的选项。
可执行“返回”批处理脚本环境的唯一事情是ERRORLEVEL。对于SqlCmd,您需要-b选项来设置它(基于sql server错误级别)
如果使用-m选项,则可以控制发送到stdout的错误消息 - 我现在无法测试,但我认为这包括受影响的行消息(可能是0级错误)。然后你必须解析它(在批处理脚本中丑陋)
这听起来像是一个真正的kludge,你可能最好使用更好的脚本环境。 PowerShell,Perl,Python等功能更强大,您可以在线找到大量示例。
当您有“无部署”要求或者您需要的很简单时,批处理是最好的。随着需求的变化,很容易碰壁。