sp_cursor_list (Transact-SQL)

接続に対して現在オープンされているサーバー カーソルの属性を返します。

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

構文

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

引数

  • [ @cursor_return = ] cursor_variable_nameOUTPUT
    宣言されているカーソル変数の名前を指定します。cursor_variable_name のデータ型は cursor で、既定値はありません。カーソルはスクロール可能、動的、読み取り専用カーソルのいずれかです。

  • [ @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 = ローカル

2 = グローバル

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 は、指定された 1 つのカーソルに関してだけ sp_cursor_list と同じ情報を返します。

権限

実行権限は、特に指定のない限りロール public に与えられます。

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

USE AdventureWorks
GO
-- Declare and open a keyset-driven cursor.
DECLARE abc CURSOR KEYSET FOR
SELECT LastName
FROM Person.Contact
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