sp_cursorprepare (Transact-SQL)

適用於:SQL Server

將資料指標語句或批次編譯成執行計畫,但不會建立資料指標。 編譯的語句稍後可供sp_cursorexecute使用。 這個程式,加上sp_cursorexecute,具有與sp_cursoropen相同的函式,但分成兩個階段。 sp_cursorprepare是在表格式資料流程 (TDS) 封包中指定 ID = 3 來叫用。

Transact-SQL 語法慣例

語法

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)