分享方式:


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 產生的備妥 handle 標識符,會傳回 int 值。

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 輸入值。

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_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 ]