適用於:SQL Server
開啟資料指標。
sp_cursoropen 定義與數據指標和數據指標選項相關聯的 SQL 語句,然後填入數據指標。
sp_cursoropen 相當於 Transact-SQL 語句 DECLARE_CURSOR 和 OPEN的組合。 這個程式是藉由在表格式數據流 (TDS) 封包中指定 ID = 2 來叫用。
語法
sp_cursoropen cursor OUTPUT
, stmt
[ , scrollopt [ OUTPUT ]
[ , ccopt [ OUTPUT ]
[ , rowcount OUTPUT [ , boundparam ] [ , ...n ] ] ] ]
[ ; ]
引數
重要
擴充預存程式的自變數必須依特定順序輸入,如 語法 一節所述。 如果參數依序輸入,就會發生錯誤訊息。
cursor
SQL Server 產生的數據指標標識碼。
cursor 是 handle 必須在涉及資料指標的所有後續程式上提供的值,例如 sp_cursorfetch。 資料 指標 參數為 int ,不能為 NULL。
cursor 允許在單一資料庫連接上使用多個數據指標。
stmt
定義數據指標結果集的必要參數。 任何字串類型的任何有效查詢字串(語法和系結)都可以做為有效的 stmt 實值類型。
scrollopt
捲動選項。
scrollopt 參數為 intNULL,而且可以是下列其中一個值。
| 值 | 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 |
OPTIMISITC_ACCEPTABLE |
如同 scrollopt,SQL Server 可以覆寫所要求的 ccopt 值。
rowcount
要搭配 AUTO_FETCH使用的擷取緩衝區數據列數目。 預設值為20個數據列。
當指派為輸入值與傳回值時,rowcount 的行為會有所不同。
| 作為輸入值 | 作為傳回值 |
|---|---|
AUTO_FETCH
指定 scrollopt 值時,rowcount 代表要放入擷取緩衝區的數據列數目。注意: > 0當指定 時AUTO_FETCH,是有效的值,但否則會忽略。 |
表示結果集中的數據列數目,但指定 scrolloptAUTO_FETCH除外。 |
boundparam
表示使用額外的參數。
boundparam 是選擇性參數,如果 scrolloptPARAMETERIZED_STMT 值設定為 ON,則應該指定此參數。
傳回碼值
如果沒有引發錯誤, sp_cursoropen 則傳回下列其中一個值。
| 值 | Description |
|---|---|
0 |
程式已順利執行。 |
0x0001 |
執行期間發生錯誤(次要錯誤,不足以引發作業中的錯誤)。 |
0x0002 |
異步操作正在進行中。 |
0x0002 |
FETCH作業正在進行中。 |
A |
此數據指標已解除分配且無法使用。 |
引發錯誤時,傳回值可能會不一致,且無法保證正確性。
當 rowcount 參數指定為傳回值時,會發生下列結果集。
| 值 | Description |
|---|---|
-1 |
如果資料欄數目未知或不適用,則傳回 。 |
-n |
當異步母體擴展生效時傳回。 表示指定 scrolloptAUTO_FETCH,放入提取緩衝區的數據列數目。 |
如果 RPC 正在使用中,則傳回值如下所示。
| 值 | Description |
|---|---|
0 |
程式成功。 |
1 |
程序失敗。 |
2 |
索引鍵集數據指標正以異步方式產生。 |
16 |
快轉游標會自動關閉。 |
sp_cursoropen如果程式執行成功,則會傳送具有 TDS 數據行格式資訊(0xa0和訊息)的 RPC 傳回參數和0xa1結果集。 如果失敗,就會傳送一或多個 TDS 錯誤訊息。 在這兩種情況下,不會傳回任何資料列資料, DONE 而且訊息計數為 0。
0x81會連同和 SELECT 令牌數據流一起0xa5傳回 (語句的標準0xa4)。
備註
stmt 參數
如果 stmt 指定預存程式的執行,則輸入參數可能會定義為 stmt 字串的一部分常數,或指定為 boundparam 自變數。 宣告的變數可以透過這種方式傳遞為係結參數。
stmt 參數允許的內容取決於 ccopt 傳回值是否OR
如果未
ALLOW_DIRECT指定,則必須使用針對包含單SELECT一語句的預存程式呼叫的 Transact-SQLEXECUTE或SELECT語句。 此外,SELECT語句必須限定為數據指標;也就是說,它不能包含關鍵詞SELECT INTO或FOR BROWSE。如果
ALLOW_DIRECT已指定,這可能會導致一或多個 Transact-SQL 語句,包括使用多個語句執行其他預存程式的語句。SELECT非語句或任何SELECT包含關鍵詞SELECT INTO或FOR BROWSE的語句都會執行,而且不會產生數據指標的建立。 在多個語句批次中包含的任何SELECT語句也是如此。 如果SELECT語句包含只與數據指標相關的子句,則會忽略那些子句。 例如,當ccopt的值是0x2002時,這是要求:具有捲動鎖定的數據指標,如果只有一
SELECT個語句限定為數據指標,則為 ,或如果有多個語句、單一非
SELECT語句或SELECT不符合數據指標的語句,則為直接語句執行。
scrollopt 參數
前五個 scrollopt 值 (KEYSEY、 、DYNAMICFORWARD_ONLYSTATIC 、 和 FAST_FORWARD) 互斥。
PARAMETERIZED_STMT 和 CHECK_ACCEPTED_TYPES 可以連結 OR 至前五個值中的任何一個。
AUTO_FETCH 與 AUTO_CLOSE 可以連結 OR 至 FAST_FORWARD。
如果 CHECK_ACCEPTED_TYPES 為 ON,則最後五個 scrollopt 值中至少一個 (KEYSET_ACCEPTABLE、 DYNAMIC_ACCEPTABLE、 FORWARD_ONLY_ACCEPTABLESTATIC_ACCEPTABLE或 FAST_FORWARD_ACCEPTABLE) 也必須是 ON。
STATIC數據指標一律會以 開啟。READ_ONLY 這表示基礎表無法透過這個數據指標更新。
ccopt 參數
前四 個 ccopt 值 (READ_ONLY、 SCROLL_LOCKS和 兩個 OPTIMISTIC 值) 互斥。
注意
選擇前四 個 ccopt 值之一會決定數據指標是唯讀的,還是使用鎖定或開放式方法來防止遺失的更新。
如果未指定 ccopt 值,預設值為 OPTIMISTIC。
ALLOW_DIRECT 和 CHECK_ACCEPTED_TYPES 可以連結 OR 至前四個值中的任何一個。
UPDT_IN_PLACE 可以連結 OR 至 READ_ONLY、 SCROLL_LOCKS或 其中一個 OPTIMISTIC 值。
如果 CHECK_ACCEPTED_TYPES 為 ON,則最後四 個ccopt 值中至少必須有一個 (READ_ONLY_ACCEPTABLE、 SCROLL_LOCKS_ACCEPTABLE和 其中一個 OPTIMISTIC_ACCEPTABLE 值) 也必須是 ON。
UPDATE定位和DELETE函式只能在擷取緩衝區內執行,而且只有在ccoptOPTIMISTIC執行。 如果 SCROLL_LOCKS 是指定的值,則保證作業會成功。 如果 OPTIMISTIC 為指定的值,則如果數據列自上次擷取后變更,作業就會失敗。
此失敗的原因是,當 是指定的值時 OPTIMISTIC ,會藉由比較時間戳或總和檢查碼值來執行開放式貨幣控制函式,如 SQL Server 所決定。 如果其中任何一個數據列不相符,作業就會失敗。
指定 做為傳 UPDT_IN_PLACE 回值會控管下列結果:
如果在具有唯一索引的數據表上執行定位更新時未設定,數據指標會從其工作數據表中刪除數據列,並將它插入數據指標所使用之任何索引鍵數據行的結尾,這會變更這些數據行。
如果設定
ON,數據指標會更新工作數據表原始數據列中的索引鍵數據行。
bound_param 參數
根據程式代碼中的錯誤訊息,當指定參數名稱時,參數名稱應該PARAMETERIZED_STMT。 未指定時 PARAMETERIZED_STMT ,錯誤訊息中未指定任何名稱。
RPC 考慮
RPC RETURN_METADATA 輸入旗標可以設定為 0x0001 ,要求 TDS 數據流中傳回數據指標選取清單元數據。
範例
A. bound_param 參數
第五個之後的任何參數會以輸入參數的形式傳遞至語句計劃。 第一個這類參數必須是下列格式的字串:
<parameter_name> <data_type> [ ,... n ]
後續參數是用來傳遞要取代 <parameter_name> 語句中的 值。