不要在While循环中重新初始化变量

时间:2012-01-26 10:44:53

标签: sql-server

我在SQL Server 2008中创建了一个存储过程,它包含以下代码片段:

WHILE (@COUNTER <= @COUNT_ROWSTOBEPROCESSED ) 
    BEGIN
        DECLARE @INFID AS INT =0;
        DECLARE @TPID AS INT =0;        
        SELECT @INFID = InfID FROM @TEMPTABLE WHERE @@ROWCOUNT = @COUNTER;
        print @INFID ;
            SET @COUNTER = @COUNTER + 1;        
    END

但它给了我以下结果:

(106 row(s) affected)
0
-26
0
0
0
0
0
0
0
0 all are zeros ....

我已经在临时表中有值,但它没有初始化为@INFID变量。

为什么会这样?我不明白......

如果有人有解决方案,请帮助我。

---- ---注释 是的,我已经看到了我的代码。但在这里我已经在我的代码中添加了计数器增量。但我仍有同样的问题。 当我在循环内运行以下查询。我发现@@ RowCount总是1。

SELECT InfID,@ROWCOUNT FROM @TEMPTABLE WHERE @@ROWCOUNT = @COUNTER;

你能告诉我如何使用while循环或for循环在sql中迭代每行temptable吗?

1 个答案:

答案 0 :(得分:2)

WHERE @@ROWCOUNT = @COUNTER不正确。

@@ROWCOUNT返回受前一个语句影响的行数。

它只会评估为true一次。 (当@COUNTER = 1时),其余时间未对@INFID操作中的SELECT进行任何分配。

你想做什么?我最好的猜测是,您需要在表中添加IDENTITY列并引用该列,而不是@@ROWCOUNT或使用游标。

但如果你解释了你的最终目标,我们可能会告诉你一个基于集合的方式,即在没有RBAR处理的情况下实现你的目标。