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 產生的備妥 控制碼 識別碼,會傳回整數值。
注意
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
選擇性參數,會傳回資料指標結果集資料行的描述。 選項 需要下列 int 輸入值。
值 | Description |
---|---|
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 | 開放式 (先前稱為 OPTCC) |
0x0008 | 開放式 (先前稱為 OPTCCVAL) |
0x2000 | ALLOW_DIRECT |
0x4000 | UPDT_IN_PLACE |
0x8000 | CHECK_ACCEPTED_OPTS |
0x10000 | READ_ONLY_ACCEPTABLE |
0x20000 | SCROLL_LOCKS_ACCEPTABLE |
0x40000 | OPTIMISTIC_ACCEPTABLE |
0x80000 | OPTIMISITC_ACCEPTABLE |
如同 scrollpt ,SQL Server 可以指派與所要求值不同的值。
備註
RPC 狀態參數是下列其中一項:
值 | 描述 |
---|---|
0 | Success |
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 時,字串的格式如下所示:
{ < 區域變數名稱 > ** < 資料類型 > } [ ,... n ]
另請參閱
sp_cursorexecute (Transact-SQL)
sp_cursoropen (Transact-SQL)
sp_cursorunprepare (Transact-SQL)
系統預存程序 (Transact-SQL)
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應