次の方法で共有


sp_cursor_list (Transact-SQL)

適用対象: SQL Server

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

Transact-SQL 構文表記規則

構文

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

引数

[ @cursor_return = ] cursor_return OUTPUT

宣言されたカーソル変数の名前。 @cursor_returnは、CURSOR 型の OUTPUT パラメーターです。 カーソルは、スクロール可能な動的な読み取り専用カーソルです。

[ @cursor_scope = ] cursor_scope

レポートするカーソルのレベルを指定します。 @cursor_scope は既定値なしで int であり、これらの値のいずれかを指定できます。

説明
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 = Keyset
3 = 動的
4= 早送り
concurrency smallint 1 = 読み取り専用
2 = スクロール ロック
3 = オプティミスティック
scrollable smallint 0 = 前方のみ
1 = スクロール可能
open_status smallint 0 = Closed
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と同じ情報をレポートしますが、指定されたカーソルに対してのみレポートされます。

アクセス許可

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

次の例では、グローバル カーソルを開き、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