次の方法で共有


sp_describe_cursor_tables (Transact-SQL)

適用対象: SQL Server

サーバー カーソルによって参照されるオブジェクトまたはベース テーブルを報告します。

Transact-SQL 構文表記規則

構文

sp_describe_cursor_tables
    [ @cursor_return = ] cursor_return OUTPUT
    , [ @cursor_source = ] { N'local' | N'global' | N'*cursor_source*' }
    , [ @cursor_identity = ] N'cursor_identity'
[ ; ]

引数

[ @cursor_return = ] cursor_return OUTPUT

カーソル出力を受け取る宣言済みカーソル変数の名前。 @cursor_return は OUTPUT cursor で、既定値はなく、 sp_describe_cursor_tables が呼び出された時点でカーソルに関連付けてはなりません。 返されるカーソルは、スクロール可能な動的な読み取り専用カーソルです。

[ @cursor_source = ] { N'local' |N'global' |N'cursor_source' }

ローカル カーソル、グローバル カーソル、またはカーソル変数の名前を使用して、報告対象のカーソルを指定するかどうかを指定します。 @cursor_sourcenvarchar(30)で、既定値はありません。

[ @cursor_identity = ] N'cursor_identity'

@cursor_sourcelocalされている場合、@cursor_identityは、LOCAL キーワードを持つか、既定でLOCALされたDECLARE CURSOR ステートメントによって作成されたカーソルの名前です。

@cursor_sourceglobalされている場合、@cursor_identityは、GLOBAL キーワードを持つか、既定でGLOBALされたDECLARE CURSOR ステートメントによって作成されたカーソルの名前です。 @cursor_identity には、ODBC アプリケーションによって開かれた API サーバー カーソルの名前を指定し、その後、 SQLSetCursorNameを呼び出してカーソルに名前を付けることもできます。

@cursor_sourcevariableされている場合、@cursor_identityは、開いているカーソルに関連付けられているカーソル変数の名前です。

@cursor_identitynvarchar(128)で、既定値はありません。

リターン コードの値

なし。

返されるカーソル

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

次の表は、 sp_describe_cursor_tablesによって返されるカーソルの形式を示しています。

列名 データ型 説明
table_owner sysname テーブル所有者のユーザー ID。
table_name sysname オブジェクトまたはベース テーブルの名前。 SQL Server では、サーバー カーソルは常に、基本テーブルではなく、ユーザー指定のオブジェクトを返します。
optimizer_hint smallint 次のオプションの 1 つ以上で構成されるビットマップ。

1 = 行レベルのロック (ROWLOCK)
4 = ページ レベルのロック (PAGELOCK)
8 = テーブル ロック (TABLOCK)
16 = 排他テーブル ロック (TABLOCKX)
32 = 更新ロック (UPDLOCK)
64 = ロックなし (NOLOCK)
128 = 高速先頭行オプション (FASTFIRST)
4096 = DECLARE CURSOR (HOLDLOCK) で使用する場合の反復可能なセマンティックの読み取り

複数のオプションを指定する場合、システムは最も限定的なオプションを使用します。 ただし、 sp_describe_cursor_tables はクエリで指定されたフラグを示します。
lock_type smallint スクロール ロックの種類は、このカーソルの基になる各ベース テーブルに対して明示的または暗黙的に要求されます。 値には、次のいずれかのオプションを指定できます。

0 = なし
1 = 共有
3 = 更新
server_name sysname、null 許容 テーブルが存在するリンク サーバーの名前。 NULLOPENQUERYまたはOPENROWSETを使用する場合。
objectid int テーブルのオブジェクト ID。 OPENQUERYまたはOPENROWSETを使用する場合は 0。
dbid int テーブルが存在するデータベースの ID。 OPENQUERY または OPENROWSET を使用する場合は 0。
dbname sysname, nullable テーブルが存在するデータベースの名前。 NULLOPENQUERYまたはOPENROWSETを使用する場合。

解説

sp_describe_cursor_tables は、サーバー カーソルによって参照されるベース テーブルを表します。 カーソルによって返される結果セットの属性の説明については、 sp_describe_cursor_columnsを使用します。 カーソルのグローバル特性 (スクロール可能性や更新可能性など) の説明については、 sp_describe_cursorを使用します。 接続に表示される Transact-SQL サーバー カーソルのレポートを取得するには、 sp_cursor_listを使用します。

アクセス許可

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

次の例では、グローバル カーソルを開き、 sp_describe_cursor_tables を使用して、カーソルによって参照されるテーブルをレポートします。

USE AdventureWorks2022;
GO
-- Declare and open a global cursor.
DECLARE abc CURSOR KEYSET FOR
SELECT LastName
FROM Person.Person
WHERE LastName LIKE 'S%';

OPEN abc;
GO
-- Declare a cursor variable to hold the cursor output variable
-- from sp_describe_cursor_tables.
DECLARE @Report CURSOR;

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

-- Fetch all the rows from the sp_describe_cursor_tables 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_tables.
CLOSE @Report;
DEALLOCATE @Report;
GO

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