有一个简单的光标,有260条记录。在循环内部不仅打印而且更新一些表。不仅有代码,还有解释
/*Declare cursor for read only*/
DECLARE crsr_one CURSOR FOR
SELECT a,b,c,d
FROM table_name
WHERE a>=100
for read only
OPEN crsr_one /*open cursor*/
DECLARE @a,@b,@c,@d /*declare loop variables*/
while (1=1) /*start while loop*/
BEGIN
FETCH crsr_one into @a,@b,@c,@d /*fetch into variable */
IF (@@sqlstatus = 2) /*Break if no more records*/
break
/*some other code with select and update table*/
print "%1! %2! %3! %4!", @a,@b,@c,@d /*Print variables*/
END
问题是: 在while循环中,它变为不定式并带来相同的数据。
知道为什么以及如何纠正它?
答案 0 :(得分:1)
您的代码看起来不错(除了DECLARE的语法无效)。 如果循环没有在@@ sqlstatus = 2上中断,那么显而易见的问题是:它具有 的值是多少?它也可以是'1',表示错误。要查找,请打印该值。 为了完全正确,你也应该测试@@ sqlstatus = 1.最简单的方法是测试@@ sqlstatus!= 0,它包括值1和2.