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

时间:2014-01-23 22:44:10

标签: sql-server batch-file sqlcmd

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

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

我看到我可以在屏幕或文件上显示输出,但是有没有办法让它把它放到变量中,所以我可以让脚本评估变量?例如:

SQLCMD -q "select count(*) from active_connections" -r @varactive
IF @varactive > 0 THEN
    <do things>
ELSE END

或者我需要切换到Powershell来处理这种逻辑吗?

2 个答案:

答案 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等功能更强大,您可以在线找到大量示例。

当您有“无部署”要求或者您需要的很简单时,批处理是最好的。随着需求的变化,很容易碰壁。