次の行の意味がわかりません。
WHILE 1 = 1
BEGIN
FETCH NEXT FROM SomeCursor INTO @SomeId, @SomeOtherColumn
IF @@FETCH_STATUS <> 0 BREAK
While 1 = 1の意味は何ですか?フェッチステータスが0と異なる場合は?
ありがとう
1 = 1は、常にtrueを返す短い条件です。つまり、永久にループします(まあ、他の場所で抜け出すまで)。
フェッチステータス値に関しては、いつものように、MSDNはここであなたの友達です。から https://msdn.Microsoft.com/en-us/library/ms187308.aspx
例えば。 0以外のものを取得した場合は、問題が発生しているため、続行しても意味がありません。
ちなみに、MSDNは、これはレガシーなものであり、@@FETCH_STATUS
はグローバルであるため、複数のカーソルが使用されている場合は信頼されないことにも注意しています。代わりに、sys.dm_exec_cursors
動的管理関数からカーソルの個々のフェッチステータス値を検索します。
WHILE 1=1
はループの始まりであり、常にTRUE
の結果になります。したがって、ループが開始されます(そして、永久に続く可能性があります)。
@@FETCH_STATUS
は、カーソルからフェッチされる(またはフェッチされた)行がまだあるかどうかを示します。
カーソルからフェッチできる行がまだある場合、@@FETCH_STATUS
は0であり、[〜#〜] success [〜#〜]。
@@FETCH_STATUS
が<> 0(-1または-2)の場合、から返される行がこれ以上ないことを示します。カーソルとあなたはその終わりに達しました。
これは、カーソルを超えているループから抜け出すために使用される通常の条件です。
@Lamakがコメントしたように、ここに @@ FETCH_STATUSのドキュメント があります。
これは、コードにFETCH NEXT
行を2回記述しないようにするために一般的に使用されるトリックです。 WHILE 1 = 1
を介して無限ループを開始し、@@FETCH_STATUS
が0以外のものを返すまで続きます。これは、カーソルの終わりに到達したか、エラーが発生したことを示します。
可能な@@FETCH_STATUS
値は次のとおりです。
Return value Description
0 The FETCH statement was successful.
-1 The FETCH statement failed or the row was beyond the result set.
-2 The row fetched is missing.