sp_cursor_list (Transact-SQL)

適用対象:SQL Server

接続用に現在開いているサーバー カーソルの属性を報告します。

Transact-SQL 構文表記規則

構文

  
sp_cursor_list [ @cursor_return = ] cursor_variable_name OUTPUT   
     , [ @cursor_scope = ] cursor_scope  
[;]  

引数

[ @cursor_return= ] cursor_variable_nameOUTPUT
宣言されたカーソル変数の名前です。 cursor_variable_nameカーソルであり、既定値はありません。 カーソルは、スクロール可能な動的な読み取り専用カーソルです。

[ @cursor_scope= ] cursor_scope
レポートするカーソルのレベルを指定します。 cursor_scopeint で、既定値は指定せず、これらの値のいずれかを指定できます。

説明
1 すべてのローカル カーソルをレポートします。
2 すべてのグローバル カーソルをレポートします。
3 ローカル カーソルとグローバル カーソルの両方をレポートします。

リターン コードの値

なし

返されるカーソル

sp_cursor_listは、結果セットとしてではなく、Transact-SQL カーソル出力パラメーターとしてレポートを返します。 これにより、Transact-SQL バッチ、ストアド プロシージャ、およびトリガーは、一度に 1 行ずつ出力を操作できます。 また、データベース API 関数からプロシージャを直接呼び出すことができなくなります。 カーソル出力パラメーターはプログラム変数にバインドする必要がありますが、データベース API ではカーソル パラメーターまたは変数のバインドはサポートされていません。

以下は、sp_cursor_list から返されるカーソルの形式です。 このカーソルの形式は、sp_describe_cursor から返される形式と同じです。

列名 データ型 説明
reference_name sysname カーソルを参照するために使用される名前。 カーソルへの参照が DECLARE CURSOR ステートメントで指定された名前を使用していた場合、参照名はカーソル名と同じです。 カーソルへの参照が変数を介していた場合、参照名はカーソル変数の名前です。
cursor_name sysname DECLARE CURSOR ステートメントに指定されたカーソルの名前です。 SQL Serverでは、カーソル変数をカーソルに設定してカーソルが作成された場合、cursor_nameはカーソル変数の名前を返します。 以前のリリースでは、この出力列はシステムによって生成された名前を返します。
cursor_scope smallint 1 = LOCAL

2 = GLOBAL
status smallint CURSOR_STATUS システム関数によって報告されるのと同じ値。

1 = カーソル名または変数によって参照されるカーソルが開いています。 カーソルが状態非依存、静的、キーセットのいずれかの場合には、結果セットに少なくとも 1 行が含まれます。 カーソルが動的な場合、結果セットには 0 個以上の行があります。

0 = カーソル名または変数によって参照されるカーソルは開いていますが、行はありません。 動的カーソルがこの値を返すことはありません。

-1 = カーソル名または変数によって参照されたカーソルは閉じています。

-2 = カーソル変数にのみ適用されます。 変数にカーソルが割り当てされていません。 おそらく、OUTPUT パラメーターによってカーソルを変数に割り当てましたが、戻る前にストアド プロシージャがカーソルを閉じました。

-3 = 指定された名前のカーソルまたはカーソル変数が存在しないか、またはカーソル変数にカーソルが割り当てられていません。
model smallint 1 = 非依存 (または静的)

2 = キーセット

3 = 動的

4 = 高速順方向
concurrency smallint 1 = 読み取り専用

2 = スクロール ロック

3 = オプティミスティック
scrollable smallint 0 = 順方向専用

1 = スクロール可能
open_status smallint 0 = クローズ

1 = 開く
cursor_rows int 結果セット内の対象となる行の数。 詳細については、「 @@CURSOR_ROWS」を参照してください。
fetch_status smallint このカーソル上での最後のフェッチの状態です。 詳細については、「 @@FETCH_STATUS:

0 = フェッチに成功しました。

-1 = フェッチに失敗したか、カーソルの境界を超えています。

-2 = 要求された行がありません。

-9 = カーソル上でフェッチは行われていません。
column_count smallint カーソル結果セット内の列数。
row_count smallint カーソルに対する最後の操作の影響を受ける行の数。 詳細については、「 @@ROWCOUNT」を参照してください。
last_operation smallint カーソルに対して最後に実行された操作:

0 = カーソルに対して操作が実行されていません。

1 = OPEN

2 = FETCH

3 = INSERT

4 = UPDATE

5 = DELETE

6 = CLOSE

7 = DEALLOCATE
cursor_handle int サーバーのスコープ内のカーソルを識別する一意の値。

解説

sp_cursor_list は、接続によってオープンされた現在のサーバー カーソルの一覧を作成し、カーソルのスクロール機能や更新機能など、各カーソルにとってグローバルな属性を示します。 sp_cursor_list によってレポートされるカーソルは次のとおりです。

  • Transact-SQL サーバー カーソル。

  • ODBC アプリケーションによってオープンされた API サーバー カーソル。この後、カーソルに名前を付けるために、SQLSetCursorName が呼び出されます。

カーソルから返された結果セットの属性の説明が必要な場合は、sp_describe_cursor_columns を使用します。 カーソルが参照するベース テーブルのレポートが必要な場合は、sp_describe_cursor_tables を使用します。 sp_describe_cursorはsp_cursor_listと同じ情報を報告しますが、指定したカーソルに対してのみレポートします。

アクセス許可

実行アクセス許可は、既定でパブリック ロールに設定されます。

次の例では、グローバル カーソルを開き、sp_cursor_list を使用してカーソルの属性をレポートします。

USE AdventureWorks2022;  
GO  
-- Declare and open a keyset-driven cursor.  
DECLARE abc CURSOR KEYSET FOR  
SELECT LastName  
FROM Person.Person  
WHERE LastName LIKE 'S%';  
OPEN abc;  
  
-- Declare a cursor variable to hold the cursor output variable  
-- from sp_cursor_list.  
DECLARE @Report CURSOR;  
  
-- Execute sp_cursor_list into the cursor variable.  
EXEC master.dbo.sp_cursor_list @cursor_return = @Report OUTPUT,  
      @cursor_scope = 2;  
  
-- Fetch all the rows from the sp_cursor_list output cursor.  
FETCH NEXT from @Report;  
WHILE (@@FETCH_STATUS <> -1)  
BEGIN  
   FETCH NEXT from @Report;  
END  
  
-- Close and deallocate the cursor from sp_cursor_list.  
CLOSE @Report;  
DEALLOCATE @Report;  
GO  
  
-- Close and deallocate the original cursor.  
CLOSE abc;  
DEALLOCATE abc;  
GO  

参照

システム ストアド プロシージャ (Transact-SQL)