sp_cursorprepexec (Transact-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure Synapse AnalyticsAnalytics Platform System (PDW)

編譯提交之數據指標語句或批次的計劃,然後建立並填入數據指標。 sp_cursorprepexec結合 和sp_cursorexecutesp_cursorprepare函式。 這個程式是藉由在表格式數據流 (TDS) 封包中指定 ID = 5 來叫用。

Transact-SQL 語法慣例

語法

sp_cursorprepexec prepared handle OUTPUT , cursor OUTPUT , params , statement , options
    [ , scrollopt [ , ccopt [ , rowcount ] ] ]
    [ , '@parameter_name [ , ...n ]' ]

引數

備妥句柄

SQL Server 產生的 備妥句柄 標識碼。 備妥的句柄 是必要的,並傳 回 int

cursor

SQL Server 產生的 數據指標 標識碼。 cursor 是必要參數,必須提供在這個資料指標上的所有後續程式上,例如 。 sp_cursorfetch

params

識別參數化語句。 變數的參數定義會取代 語句中的參數標記。 params 是呼叫 ntextnchar 或 nvarchar 輸入值的必要參數。

注意

當語句參數化且 scrollopt PARAMETERIZED_STMT 值為 ON 時,請使用 ntext 字串作為輸入值。

陳述式

定義數據指標結果集。 語句參數是必要的,而且會呼叫 ntextnchar 或 nvarchar 輸入值。

注意

指定語句值的規則與 的sp_cursoropen規則相同,但語句字串數據類型必須是 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

由於要求的選項可能不適用於語句定義的數據指標,因此此參數可做為輸入和輸出。 在這種情況下,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

如同 scrollopt,SQL Server 可以指派與所要求的值不同的值。

rowcount

選擇性參數,表示要與AUTO_FETCH搭配使用的擷取緩衝區數據列數目。 預設值為20個數據列。 當指派為輸入值與傳回值時,rowcount 的行為會有所不同。

作為輸入值 作為傳回值
使用 FAST_FORWARD數據指標 數據列計數 指定AUTO_FETCH時,代表要放入提取緩衝區的數據列數目。 表示結果集中的數據列數目。 指定 scrollopt AUTO_FETCH 值時,rowcount 會傳回擷取至提取緩衝區的數據列數目。

parameter_name

指定參數自變數中所定義的一或多個參數名稱。 參數必須針對參數中包含的每個參數提供參數。 當 Params 中的 Transact-SQL 語句或批次未定義任何參數時,就不需要此自變數。

傳回碼值

如果 params 傳回 NULL 值,則語句不會參數化。

範例

這個範例示範 如何使用 sp_cursorprepexec。 它會針對 Person 資料庫中的數據表 AdventureWorks2022 執行查詢,並傳回名字為 「Katherine」 的所有記錄。

USE AdventureWorks2022;
GO

DECLARE @prep_handle INT,
    @cursor INT,
    @scrollopt INT = 4104,
    @ccopt INT = 8193,
    @rowcnt INT;

EXEC sp_cursorprepexec
    @prep_handle OUTPUT,
    @cursor OUTPUT,
    N'@fName nvarchar(100)',
    N'SELECT FirstName, LastName FROM Person.Person WHERE FirstName = @fName',
    @scrollopt,
    @ccopt,
    @rowcnt OUTPUT,
    'Katherine';

EXEC sp_cursorfetch @cursor;