我正在使用sql server。
我有一段像这样的代码
while(@@rowcount>0)
begin
--do stuff
end
问题是,我想做一些干净整洁的事情,以确保第一次迭代运行。你打算以前提出什么?目前,我使用了
select 'Calling this to initialize @@rowcount to 1'
这是不言自明的,但如果有更好的东西,我想知道。
答案 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