sp_cursorprepexec (Transact-SQL)
适用于:SQL Server
Azure SQL 数据库
Azure Synapse Analytics
Platform System (PDW)
为提交的游标语句或批处理编译计划,然后创建并填充游标。 sp_cursorprepexec
合并 sp_cursorprepare
和 sp_cursorexecute
. 此过程通过在表格数据流 (TDS) 数据包中指定 ID = 5
来调用。
语法
sp_cursorprepexec prepared handle OUTPUT , cursor OUTPUT , params , statement , options
[ , scrollopt [ , ccopt [ , rowcount ] ] ]
[ , '@parameter_name [ , ...n ]' ]
参数
准备句柄
SQL Server 生成的 已准备句柄 标识符。 准备句柄 是必需的,并返回 int。
cursor
SQL Server 生成的 游标 标识符。 游标 是必须针对此游标执行的所有后续过程提供的必需参数,例如 sp_cursorfetch
。
params
标识参数化语句。 变量的参数定义将替换为语句中的参数标记。 params 是调用 ntext、nchar 或 nvarchar 输入值的必需参数。
注意
参数化语句且 scrollopt PARAMETERIZED_STMT 值为 ON 时,请使用 ntext 字符串作为输入值。
语句
定义游标结果集。 语句参数是必需的,并调用 ntext、nchar 或 nvarchar 输入值。
注意
指定语句值的规则与指定sp_cursoropen
语句值的规则相同,但语句字符串数据类型必须为 ntext 除外。
options
一个可选参数,它返回游标结果集列的说明。 选项 需要以下 int 输入值。
值 | 说明 |
---|---|
0x0001 | RETURN_METADATA |
scrollopt
滚动选项。 scrollopt 是一个可选参数,需要以下 int 输入值之一。
值 | 说明 |
---|---|
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 输入值之一。
值 | 说明 |
---|---|
0x0001 | READ_ONLY |
0x0002 | SCROLL_LOCKS(以前称为 LOCKCC) |
0x0004 | 乐观(以前称为 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 可以分配不同于所请求的值。
rowcount
一个可选参数,表示要用于AUTO_FETCH的提取缓冲区行数。 默认值为 20 行。 当分配为输入值与返回值时,rowcount 的行为方式不同。
作为输入值 | 作为返回值 |
---|---|
使用FAST_FORWARD游标 行计数 指定AUTO_FETCH表示要放入提取缓冲区的行数。 | 表示结果集中的行数。 指定 scrollopt AUTO_FETCH 值时,行计数将返回提取缓冲区中的行数。 |
parameter_name
指定参数参数中定义的一个或多个参数名称。 必须为参数中包含的每个参数提供一个参数。 如果参数中的 Transact-SQL 语句或批处理未定义任何参数,则不需要此参数。
返回代码值
如果 参数 返回 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;