Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在SQL批处理脚本中使用条件_Sql Server_Batch File_Sqlcmd - Fatal编程技术网

Sql server 在SQL批处理脚本中使用条件

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

我正在尝试设置一个批处理脚本,它基本上对数据库运行SQL语句,如果脚本返回结果,它将遵循一些逻辑

有没有办法让SQLCMD实际返回它找到的行数,或者类似的东西

我知道我可以在屏幕或文件上显示输出,但是有没有办法将其放入变量中,以便让脚本对变量求值?例如:

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.