适用于:SQL Server
Azure SQL 数据库
Azure SQL 托管实例
Azure Synapse Analytics
分析平台系统 (PDW)
Microsoft Fabric 预览版中的 SQL 数据库
为提交的游标语句或批处理编译计划,然后创建并填充游标。
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
标识参数化语句。 变量的参数定义将替换为语句中的参数标记。 参数是必需的。 指定后, 参数 将调用 ntext、 nchar 或 nvarchar 输入值。
注意
参数化语句且 scrollopt PARAMETERIZED_STMT 值为 ON 时,请使用 ntext 字符串作为输入值。
语句
定义游标结果集。 语句参数是必需的,并调用 ntext、nchar 或 nvarchar 输入值。
注意
指定 语句 值的规则与 sp_cursoropen相同,但 语句 字符串数据类型必须为 ntext 除外。
options
一个可选参数,它返回游标结果集列的说明。 options 参数需要以下 int 输入值。
| 值 | 说明 |
|---|---|
0x0001 |
RETURN_METADATA |
scrollopt
滚动选项。 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 参数是可选的。 指定后, 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 行。 当分配为输入值与返回值时, 行计数 参数的行为方式不同。
| 作为输入值 | 作为返回值 |
|---|---|
| 使用FAST_FORWARD游标 行计数 指定AUTO_FETCH表示要放入提取缓冲区的行数。 | 表示结果集中的行数。 指定 scrolloptAUTO_FETCH 值后, 行计数 将返回提取缓冲区中的行数。 |
parameter_name
指定参数参数中定义的一个或多个参数名称。 必须为参数中包含的每个参数提供一个参数。 如果 参数 中的 Transact-SQL 语句或批处理未定义任何参数,则不需要此参数。
返回代码值
如果 参数 值返回 NULL,则语句不会参数化。
示例
此示例演示了 sp_cursorprepexec如何使用 。 它针对数据库中的 Person 表 AdventureWorks2022 运行查询,返回名字为“Kirby”的所有记录。
USE AdventureWorks2022;
GO
DECLARE @prep_handle INT,
@cursor INT,
@scrollopt INT = 4104,
@ccopt INT = 8193,
@rowcnt INT;
EXECUTE 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,
'Kirby';
EXECUTE sp_cursorfetch @cursor;