sp_cursorprepare (Transact-SQL)
適用於:SQL Server
將數據指標語句或批次編譯成執行計劃,但不會建立數據指標。 編譯的語句稍後可供 使用 sp_cursorexecute
。 這個程式與 sp_cursorexecute
具有相同的函式 sp_cursoropen
,但會分割成兩個階段。 sp_cursorprepare
是在表格式資料流 (TDS) 封包中指定 ID = 3
來叫用。
語法
sp_cursorprepare prepared_handle OUTPUT , params , stmt , options
[ , scrollopt [ , ccopt ] ]
[ ; ]
引數
prepared_handle
SQL Server 產生的備妥 handle
標識符,會傳回 int 值。
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 輸入值。
值 | Description |
---|---|
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 輸入值。
值 | Description |
---|---|
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 狀態參數是下列其中一個值:
值 | Description |
---|---|
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 ]