Sql server 在SQL批处理脚本中使用条件
我正在尝试设置一个批处理脚本,它基本上对数据库运行SQL语句,如果脚本返回结果,它将遵循一些逻辑 有没有办法让SQLCMD实际返回它找到的行数,或者类似的东西 我知道我可以在屏幕或文件上显示输出,但是有没有办法将其放入变量中,以便让脚本对变量求值?例如:Sql server 在SQL批处理脚本中使用条件,sql-server,batch-file,sqlcmd,Sql Server,Batch File,Sqlcmd,我正在尝试设置一个批处理脚本,它基本上对数据库运行SQL语句,如果脚本返回结果,它将遵循一些逻辑 有没有办法让SQLCMD实际返回它找到的行数,或者类似的东西 我知道我可以在屏幕或文件上显示输出,但是有没有办法将其放入变量中,以便让脚本对变量求值?例如: SQLCMD -q "select count(*) from active_connections" -r @varactive IF @varactive > 0 THEN <do things> ELSE END
SQLCMD -q "select count(*) from active_connections" -r @varactive
IF @varactive > 0 THEN
<do things>
ELSE END
或者我需要切换到Powershell来处理这种逻辑吗?请参阅,您将看到许多您可能从未注意过的选项
可执行文件返回到批处理脚本环境的唯一内容是ERRORLEVEL。对于SqlCmd,您需要-b选项根据sql server错误级别设置此选项
如果您使用-m选项,您可以控制发送到stdout的错误消息-我目前无法测试,但我认为这可能包括受影响的行消息0级错误。然后,您将不得不在批处理脚本中解析这一问题
这听起来像是一个真正的难题,最好使用一个更好的脚本环境。PowerShell、Perl、Python等功能更加强大,您可以在线找到大量示例
当您没有部署需求或需求简单时,批处理是最好的。当需要更改时,很容易出错。虽然@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.