SQLServerでフェッチした結果を取得するには、@@FETCH_STATUSを使用します。
構文
- (構文)
- @@FETCH_STATUS
取得する型はint型です。
取得した結果値の意味は以下の通りです。
値 | 意味 |
---|---|
0 | フェッチが正常に実行できた |
-1 | フェッチに失敗した |
-2 | フェッチする行が存在しない |
-9 | フェッチ操作を実行しない |
サンプル
例)@@FETCH_STATUSが0の間ループするサンプル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
--変数定義 DECLARE @name varchar(100) DECLARE @objectid int --カーソルを定義する DECLARE cur CURSOR FOR SELECT name, object_id FROM sys.tables --カーソルを開く OPEN cur --次のレコードを取得する FETCH NEXT FROM cur INTO @name, @objectid --レコードが存在する間ループする WHILE @@FETCH_STATUS = 0 BEGIN --取得した値を表示する print @name print @objectid --次のレコードを取得する FETCH NEXT FROM cur INTO @name, @objectid END --カーソルを閉じる CLOSE cur DEALLOCATE cur |
上記16行目のように判定すると、フェッチデータが存在する間ループするという処理ができます。
備考
- @@FETCH_STATUSは、OPEN中のカーソルが最後にフェッチした状態を取得します
- なので複数のカーソルをオープンしている時は、@@FETCH_STATUSの取得タイミングにご注意ください。
(FETCHした直後に取得すのが安全です。)