我在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吗?
答案 0 :(得分:2)
WHERE @@ROWCOUNT = @COUNTER
不正确。
@@ROWCOUNT
返回受前一个语句影响的行数。
它只会评估为true
一次。 (当@COUNTER
= 1时),其余时间未对@INFID
操作中的SELECT
进行任何分配。
你想做什么?我最好的猜测是,您需要在表中添加IDENTITY
列并引用该列,而不是@@ROWCOUNT
或使用游标。
但如果你解释了你的最终目标,我们可能会告诉你一个基于集合的方式,即在没有RBAR处理的情况下实现你的目标。