MSDNは、_@@FETCH_STATUS
_はグローバルであるため、注意して使用することをお勧めします :
@@ FETCH_STATUSは接続上のすべてのカーソルに対してグローバルであるため、@@ FETCH_STATUSは慎重に使用してください。 FETCHステートメントが実行された後、@@ FETCH_STATUSのテストは、他のFETCHステートメントが別のカーソルに対して実行される前に行われる必要があります。
これは私に2つの質問を導きます:
@@FETCH_STATUS
_とWHILE
条件の間の_FETCH NEXT
_の値に影響を与える可能性はありますか?たとえば、他のカーソルが、スケジュールに従って呼び出されるストアドプロシージャ内にあるとします。@@FETCH_STATUS
_には_@@IDENTITY
_のSCOPE_IDENTITY()
と同等のものがありますか?int
の一時変数を宣言し、一時変数を@@ FETCH_STATUSに等しく設定します。 FETCH NEXTステートメントの後、@@ FETCH_STATUSの代わりに一時変数をループ制御として使用します。これありがとう!同様の問題がありました。カーソルを使用するプロシージャがありましたが、そのループ内で、カーソルを使用する別のプロシージャを呼び出しました。
私の解決策はローカル変数を使用することでした
DECLARE @MyFetchStatus int
その後、FETCH NEXTを行うたびに、
SET @MyFetchStatus = @@FETCH_STATUS.
その後、ループを制御するために@MyFetchStatusのみを参照しました。
ありがとう!