批处理循环

时间:2015-05-18 14:31:11

标签: sql-server loops batch-file for-loop

我是编程新手,仍在努力围绕某些方式实现循环。

我有一个运行实验并收集数据的脚本。该脚本使用单个int值跟踪测试运行。因此,第一次运行脚本时,收集的数据将在SQL表中有一个名为TestNum的列,以1开头。下次运行时,它将为2,依此类推。现在问题是我已经更新了脚本,因为我开始这样做,并且我添加了一个循环,得到这个数字不同,显然它没有经过深思熟虑,因为它只能通过抓住最后一个TestNum并添加1 < / p>

for /f "delims= " %%a in ('sqlcmd -S SERVER -d DATABASE -Q "SET NOCOUNT ON;
        SELECT MAX(TestNum)+1 FROM TABLE"') DO SET TestNum=%%a

最终我的问题归结为:如果我想实现一个循环,如果没有TestNums存在将设置TestNum = 1,否则实现上面的循环我知道我可以写这样的伪代码

If TestNum from SQL Table is null
{
    (set TestNum variable in script = 1)
}
Else do (for /f "delims= " %%a in ('sqlcmd -S SERVER -d DATABASE -Q "SET NOCOUNT ON;
        SELECT MAX(TestNum)+1 FROM TABLE"') DO SET TestNum=%%a
        )

1 个答案:

答案 0 :(得分:2)

我不明白为什么你不能在当前的实现中使用Transact-SQL ISNULL function(或者,COALESCE):

for /f "delims= " %%a in (
  'sqlcmd -S SERVER -d DATABASE -Q "SET NOCOUNT ON; SELECT ISNULL(MAX(TestNum), 0) + 1 FROM TABLE"'
) DO SET TestNum=%%a

如果表为空,MAX(TestNum)将评估为NULL。 ISNULL(..., 0)调用会将其变为0,增量将返回1.

如果表格不为空,则脚本的工作方式与其工作方式完全相同。