sp_cursorprepare (Transact-SQL)
適用対象: SQL Server
カーソル ステートメントまたはバッチを実行プランにコンパイルしますが、カーソルは作成しません。 コンパイルされたステートメントは、後で sp_cursorexecute
で使用できます。 この手順は、 sp_cursorexecute
と組み合わせて、 sp_cursoropen
と同じ機能を持っていますが、2 つのフェーズに分割されます。 sp_cursorprepare
は、表形式データ ストリーム (TDS) パケットで ID = 3
を指定することによって呼び出されます。
構文
sp_cursorprepare prepared_handle OUTPUT , params , stmt , options
[ , scrollopt [ , ccopt ] ]
[ ; ]
引数
prepared_handle
int 値を返す、SQL Server によって生成された準備済みのhandle
識別子。
prepared_handle は、カーソルを開くために sp_cursorexecute
プロシージャに提供されます。 ハンドルが作成されると、サインアウトするまで、または sp_cursorunprepare
プロシージャを使用して明示的に削除するまで存在します。
params
パラメーター化されたステートメントを指定します。 パラメーター変数の定義は、ステートメント内のパラメーター マーカーに置き換えます。 params は、 ntext、 nchar、または 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入力値を必要とします。
値 | 説明 |
---|---|
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 入力値を必要とする省略可能なパラメーターです。
値 | 説明 |
---|---|
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 状態パラメーターは、次のいずれかの値です。
値 | 説明 |
---|---|
0 |
成功 |
0x0001 |
失敗 |
1FF6 |
メタデータを返すことができませんでした。 注: この理由は、ステートメントが結果セットを生成しないということです。たとえば、 INSERT または DDL ステートメントです。 |
例
次のコードは、 sp_cursorprepare
と sp_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 ]