@@FETCH_STATUS (Transact-SQL)
接続によって現在オープンされているカーソルに対して最後に実行した FETCH ステートメントの状態を返します。
構文
@@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 AdventureWorks2012.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