すでに Google で検索しましたが、質問に対する回答が見つかりませんでした。インターネットでは、すべてが私が正しいと言っています。私の問題は-今のところ、カーソルに保存した値を書き込もうとしています(はい、それだけです)。ただし、私が使用するループは無限大であり、カーソルからすべての値を最初から最後まで、何度も何度も書き込みます...
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 レコードのみを書き込みます。
この例にはもっと良い解決策があることは知っていますが、カーソルが機能しない理由を知る必要があります。将来役に立つかもしれません。回答ありがとうございます。