sp_describe_cursor (Transact-SQL)

サーバー カーソルの属性をレポートします。

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

構文

sp_describe_cursor [ @cursor_return = ] output_cursor_variable OUTPUT 
     { [ , [ @cursor_source = ] N'local'
    , [ @cursor_identity = ] N'local_cursor_name' ] 
   | [ , [ @cursor_source = ] N'global'
    , [ @cursor_identity = ] N'global_cursor_name' ] 
   | [ , [ @cursor_source = ] N'variable'
     , [ @cursor_identity = ] N'input_cursor_variable' ] 
     } 
[;]

引数

  • [ @cursor\_return= ] output_cursor_variable OUTPUT
    カーソル出力を受け取るように宣言したカーソル変数の名前です。 output_cursor_variable のデータ型は cursor で、既定値はありません。sp_describe_cursor の呼び出し時には、この名前をどのカーソルにも関連付けないでください。 スクロール可能で動的な読み取り専用カーソルが返されます。

  • [ @cursor\_source= ] { N'local' | N'global' | N'variable' }
    レポート対象のカーソルをローカル カーソル、グローバル カーソル、カーソル変数のどの名前で指定するのかを指定します。 このパラメーターのデータ型は nvarchar(30) です。

  • [ @cursor\_identity= ] N'local_cursor_name' ]
    LOCAL キーワードを指定した DECLARE CURSOR ステートメント、または既定値が LOCAL になっている DECLARE CURSOR ステートメントによって作成されたカーソルの名前を指定します。 local_cursor_name のデータ型は nvarchar(128) です。

  • [ @cursor\_identity= ] N'global_cursor_name' ]
    GLOBAL キーワードを指定した DECLARE CURSOR ステートメント、または既定値が GLOBAL になっている DECLARE CURSOR ステートメントによって作成されたカーソルの名前を指定します。 global_cursor_name のデータ型は nvarchar(128) です。

    global_cursor_name には、ODBC アプリケーションによってオープンされた API サーバー カーソルの名前も指定できます。この ODBC アプリケーションでは、SQLSetCursorName を呼び出すことによってカーソルが指定されます。

  • [ @cursor\_identity= ] N'input_cursor_variable' ]
    開いているカーソルに関連付けられたカーソル変数の名前です。 input_cursor_variable のデータ型は nvarchar(128) です。

リターン コードの値

なし

返されるカーソル

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

次の表に、sp_describe_cursor を使って返されるカーソルの形式を示します。 カーソルの形式は、sp_cursor_list を使用した場合に返される形式と同じです。

列名

データ型

説明

reference_name

sysname

カーソルを参照するために使用される名前です。 DECLARE CURSOR ステートメントに指定された名前を介してカーソルを参照すると、参照名はカーソル名と同じになります。 変数を使用してカーソルを参照した場合、参照名は変数の名前になります。

cursor_name

sysname

DECLARE CURSOR ステートメントに指定されたカーソルの名前です。 SQL Server では、カーソル変数を設定してカーソルが作成されると、cursor_name はカーソル変数の名前を返します。 以前のバージョンの SQL Server では、この出力列にはシステムが生成した名前が返されていました。

cursor_scope

tinyint

1 = LOCAL

2 = GLOBAL

status

int

CURSOR_STATUS システム関数によってレポートされたものと同じ値です。

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

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

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

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

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

model

tinyint

1 = 状態非依存 (または静的)

2 = キーセット

3 = 動的

4 = 高速順方向

concurrency

tinyint

1 = 読み取り専用

2 = スクロール ロック

3 = オプティミスティック

scrollable

tinyint

0 = 順方向専用

1 = スクロール可能

open_status

tinyint

0 = クローズ

1 = オープン

cursor_rows

decimal(10,0)

結果セット内の条件を満たす行の数です。 詳細については、「@@CURSOR_ROWS (Transact-SQL)」を参照してください。

fetch_status

smallint

このカーソル上での最後のフェッチのステータスです。 詳細については、「@@FETCH_STATUS (Transact-SQL)」を参照してください。

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

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

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

-9 = カーソル上でフェッチは行われていません。

column_count

smallint

カーソル結果セットの列数です。

row_count

decimal(10,0)

カーソルで実行された最後の操作で処理された行数です。 詳細については、「@@ROWCOUNT (Transact-SQL)」を参照してください。

last_operation

tinyint

カーソル上で実行された最後の操作です。

0 = カーソル上で操作は実行されていません。

1 = OPEN

2 = FETCH

3 = INSERT

4 = UPDATE

5 = DELETE

6 = CLOSE

7 = DEALLOCATE

cursor_handle

int

サーバーの有効範囲内でのカーソルの一意な値です。

説明

sp_describe_cursor は、カーソルがスクロール可能かどうか、更新可能かどうかなど、サーバー カーソルのグローバルな属性を説明します。 カーソルから返された結果セットの属性の説明が必要な場合は、sp_describe_cursor_columns を使用します。 カーソルが参照するベース テーブルのレポートが必要な場合は、sp_describe_cursor_tables を使用します。 接続時に可視である Transact-SQL サーバー カーソルに関するレポートが必要な場合は、sp_cursor_list を使用します。

DECLARE CURSOR ステートメントは、SQL Server が DECLARE CURSOR ステートメントに含まれる SELECT ステートメントでサポートしていないカーソルの種類を要求する場合があります。 SQL Server は、SELECT ステートメントでサポートする種類のカーソルに暗黙的に変換します。 DECLARE CURSOR ステートメント内で TYPE_WARNING を指定した場合、SQL Server は変換の完了を知らせる情報メッセージをアプリケーションに送ります。 sp_describe_cursor を呼び出して、インプリメントされたカーソルの種類を調べることができます。

権限

public ロールのメンバーシップが必要です。

使用例

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

USE AdventureWorks2012;
GO
-- Declare and open a global cursor.
DECLARE abc CURSOR STATIC FOR
SELECT LastName
FROM Person.Person;

OPEN abc;

-- Declare a cursor variable to hold the cursor output variable
-- from sp_describe_cursor.
DECLARE @Report CURSOR;

-- Execute sp_describe_cursor into the cursor variable.
EXEC master.dbo.sp_describe_cursor @cursor_return = @Report OUTPUT,
        @cursor_source = N'global', @cursor_identity = N'abc';

-- Fetch all the rows from the sp_describe_cursor output cursor.
FETCH NEXT from @Report;
WHILE (@@FETCH_STATUS <> -1)
BEGIN
    FETCH NEXT from @Report;
END

-- Close and deallocate the cursor from sp_describe_cursor.
CLOSE @Report;
DEALLOCATE @Report;
GO

-- Close and deallocate the original cursor.
CLOSE abc;
DEALLOCATE abc;
GO

関連項目

参照

CURSOR_STATUS (Transact-SQL)

DECLARE CURSOR (Transact-SQL)

sp_cursor_list (Transact-SQL)

sp_describe_cursor_columns (Transact-SQL)

sp_describe_cursor_tables (Transact-SQL)

概念

カーソル