如何准备(@@ rowcount> 0)

时间:2017-12-20 14:51:16

标签: sql-server tsql while-loop

我正在使用sql server。

我有一段像这样的代码

while(@@rowcount>0)
begin
--do stuff
end

问题是,我想做一些干净整洁的事情,以确保第一次迭代运行。你打算以前提出什么?目前,我使用了

select 'Calling this to initialize @@rowcount to 1' 

这是不言自明的,但如果有更好的东西,我想知道。

3 个答案:

答案 0 :(得分:2)

添加变量允许您单独处理初始条件,并保留@@RowCount的值,如果做事情可能有几个步骤:

declare @RowCount as Int = 42;
-- Initialize   @RowCount   to skip the loop entirely, if appropriate.

while @RowCount > 0
  begin
  -- Do stuff;
  set @RowCount = @@RowCount;
  -- Perhaps do more stuff that might affect   @@RowCount .
  end;

或者,变量可用于仅处理循环的第一次传递:

declare @FirstPass as Bit = 1;
-- Initialize   @FirstPass to skip the loop entirely, if appropriate.
-- Note that the loop will always be entered once if   @@RowCount   has not been cleared.

while @@RowCount > 0 or @FirstPass = 1
  begin
  set @FirstPass = 0;
  -- Do stuff;
  end;

我的首选是使用第一种方法,因为它很简单,并提供了@@RowCount的捕获值,可用于记录,调试......而不用担心哪些语句可能会改变值

答案 1 :(得分:1)

您可以使用旧的GOTO

startloop:
  -- do stuff
IF @@rowcount > 0 GOTO startloop

答案 2 :(得分:0)

这比接受的答案短

group by