@@FETCH_STATUS (Transact-SQL)

接続によって現在オープンされているカーソルに対して最後に実行した FETCH ステートメントの状態を返します。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

@@FETCH_STATUS

戻り値の型

integer

戻り値

戻り値

説明

0

FETCH ステートメントは正常に実行されました。

-1

FETCH ステートメントが失敗したか、または行が結果セットに収まりません。

-2

取り出した行がありません。

説明

@@FETCH_STATUS は接続上のすべてのカーソルに対してグローバルな変数なので、@@FETCH_STATUS を使用する際は注意してください。FETCH ステートメントを実行した後、別のカーソルに対して他の FETCH ステートメントを実行する前に、@@FETCH_STATUS の値を調べる必要があります。接続時にフェッチが実行されるまで、@@FETCH_STATUS の値は未定義です。

たとえば、ユーザーがあるカーソルからの FETCH ステートメントを実行します。次に、別のカーソルからの結果を開いて処理するためのストアド プロシージャを呼び出します。呼び出したストアド プロシージャから制御が戻された時点で、@@FETCH_STATUS は、ストアド プロシージャを呼び出す前に実行した FETCH ステートメントではなく、ストアド プロシージャで最後に実行した FETCH ステートメントを反映します。

特定のカーソルの最後のフェッチの状態を取得するには、動的管理関数 sys.dm_exec_cursors の fetch_status 列にクエリを実行します。

次の例では、@@FETCH_STATUS を使用して WHILE ループ内のカーソルの動作を制御します。

DECLARE Employee_Cursor CURSOR FOR
SELECT BusinessEntityID, JobTitle
FROM AdventureWorks2008R2.HumanResources.Employee;
OPEN Employee_Cursor;
FETCH NEXT FROM Employee_Cursor;
WHILE @@FETCH_STATUS = 0
   BEGIN
      FETCH NEXT FROM Employee_Cursor;
   END;
CLOSE Employee_Cursor;
DEALLOCATE Employee_Cursor;
GO