sp_cursorprepare (Transact-SQL)

適用対象: SQL Server

カーソル ステートメントまたはバッチを実行プランにコンパイルしますが、カーソルは作成しません。 コンパイルされたステートメントは、後で sp_cursorexecuteで使用できます。 この手順は、 sp_cursorexecuteと組み合わせて、 sp_cursoropenと同じ機能を持っていますが、2 つのフェーズに分割されます。 sp_cursorprepare は、表形式データ ストリーム (TDS) パケットで ID = 3 を指定することによって呼び出されます。

Transact-SQL 構文表記規則

構文

sp_cursorprepare prepared_handle OUTPUT , params , stmt , options
    [ , scrollopt [ , ccopt ] ]
[ ; ]

引数

prepared_handle

int 値を返す、SQL Server によって生成された準備済みのhandle識別子。

prepared_handle は、カーソルを開くために sp_cursorexecute プロシージャに提供されます。 ハンドルが作成されると、サインアウトするまで、または sp_cursorunprepare プロシージャを使用して明示的に削除するまで存在します。

params

パラメーター化されたステートメントを指定します。 パラメーター変数の定義は、ステートメント内のパラメーター マーカーに置き換えます。 params は、 ntextnchar、または nvarchar 入力値を呼び出す必須のパラメーターです。 ステートメントがパラメーター化されていない場合は、 NULL 値を入力します。

stmtがパラメーター化され、scrollopt PARAMETERIZED_STMT値が ON の場合は、入力値として ntext 文字列を使用します。

stmt

カーソル結果セットを定義します。 stmt パラメーターが必要であり、ntext、**nchar、または nvarchar 入力値を呼び出します。

stmt値を指定する規則はsp_cursoropenと同じですが、stmt文字列データ型は ntext にする必要があります。

options

カーソルの結果セット列の説明を返します。 options パラメーターは int で、既定値は NULL です。 0x0001に設定すると、RETURN_METADATAを意味します。

scrollopt

スクロール オプションです。 scrollopt パラメーターは省略可能なパラメーターであり、次のいずれかのint入力値を必要とします。

Value 説明
0x0001 KEYSET
0x0002 DYNAMIC
0x0004 FORWARD_ONLY
0x0008 STATIC
0x10 FAST_FORWARD
0x1000 PARAMETERIZED_STMT
0x2000 AUTO_FETCH
0x4000 AUTO_CLOSE
0x8000 CHECK_ACCEPTED_TYPES
0x10000 KEYSET_ACCEPTABLE
0x20000 DYNAMIC_ACCEPTABLE
0x40000 FORWARD_ONLY_ACCEPTABLE
0x80000 STATIC_ACCEPTABLE
0x100000 FAST_FORWARD_ACCEPTABLE

要求された値は、 stmt によって定義されたカーソルに適していない可能性があるため、このパラメーターは入力と出力の両方として機能します。 このような場合は、SQL Server によって適切な値が割り当てられます。

ccopt

コンカレンシー制御オプション。 ccopt は、次のいずれかの int 入力値を必要とする省略可能なパラメーターです。

Value 説明
0x0001 READ_ONLY
0x0002 SCROLL_LOCKS (以前は LOCKCC と呼ばれる)
0x0004 OPTIMISTIC (以前は OPTCC と呼ばれる)
0x0008 OPTIMISTIC (以前は OPTCCVAL と呼ばれる)
0x2000 ALLOW_DIRECT
0x4000 UPDT_IN_PLACE
0x8000 CHECK_ACCEPTED_OPTS
0x10000 READ_ONLY_ACCEPTABLE
0x20000 SCROLL_LOCKS_ACCEPTABLE
0x40000 OPTIMISTIC_ACCEPTABLE
0x80000 OPTIMISTIC_ACCEPTABLE

scrollptと同様に、SQL Server は要求されたものとは異なる値を割り当てることができます。

解説

RPC 状態パラメーターは、次のいずれかの値です。

Value 説明
0 成功
0x0001 失敗
1FF6 メタデータを返すことができませんでした。

注: この理由は、ステートメントが結果セットを生成しないということです。たとえば、 INSERT または DDL ステートメントです。

次のコードは、 sp_cursorpreparesp_cursorexecuteの使用例です。

DECLARE @handle INT, @p5 INT, @p6 INT;

EXEC sp_cursorprepare @handle OUTPUT,
    N'@dbid int',
    N'select * from sys.databases where database_id < @dbid',
    1,
    @p5 OUTPUT,
    @p6 OUTPUT;

DECLARE @p1 INT
SET @P1 = @handle;

DECLARE @p2 INT;
DECLARE @p3 INT;
DECLARE @p4 INT;

SET @P6 = 4;

EXEC sp_cursorexecute @p1,
    @p2 OUTPUT,
    @p3 OUTPUT,
    @p4 OUTPUT,
    @p5 OUTPUT,
    @p6;

EXEC sp_cursorfetch @P2;
EXEC sp_cursorunprepare @handle;
EXEC sp_cursorclose @p2;

stmtがパラメーター化され、scrollopt PARAMETERIZED_STMT値がONされると、文字列の形式は次のようになります。

<parameter_name> <data_type> [ ,... n ]