我已经用谷歌搜索过,但我没有找到我的问题的答案。在互联网上,一切都说我做得对。我的问题是 - 我现在正在尝试将我保存到光标的值写入(是的,仅此而已)。但是我使用的循环是无穷大的,它从头到尾从光标写入所有值,一次又一次地......
CREATE PROCEDURE CreateOrEditClient(...Parameters...) AS
DECLARE c CURSOR FOR SELECT column FROM table;
DECLARE @wrt VARCHAR(20);
DECLARE @tmp INT = 0;
BEGIN
OPEN c;
FETCH NEXT FROM c INTO @wrt;
WHILE @@FETCH_STATUS = 0
BEGIN
print CAST(@tmp AS VARCHAR(10)) + ' ' + @wrt;
SET @tmp = @tmp +1;
FETCH NEXT FROM c INTO @wrt;
END;
CLOSE c;
DEALLOCATE c;
END;
EXEC CreateOrEditClient ...;
在我看来,游标写得正确,但输出是:
0 790710/1112
1 900519/5555
2 790716/7877
....
19 111111/1111
0 790710/1112
1 900519/5555
....
最后它会写入错误消息“超出最大存储过程、函数、触发器或视图嵌套级别(限制 32)”。
如果我只使用
SELECT column FROM table;
它只写入 20 条记录。
我知道这个例子有更好的解决方案,但我需要知道为什么光标不起作用。将来可能会有用。感谢您的每一个回答。