sp_cursorprepare (Transact-SQL)
适用于:SQL Server
将游标语句或批处理编译成执行计划,但并不创建游标。 编译的语句以后可供 sp_cursorexecute 使用。 此过程与sp_cursorexecute具有与 sp_cursoropen 相同的功能,但分为两个阶段。 sp_cursorprepare通过在 TDS) 数据包 (表格数据流中指定 ID = 3 来调用。
语法
sp_cursorprepare prepared_handle OUTPUT , params , stmt , options
[ , scrollopt [ , ccopt ] ]
[ ; ]
参数
prepared_handle
一个SQL Server生成的准备句柄标识符,该标识符返回整数值。
注意
prepared_handle 随后提供给sp_cursorexecute过程以打开游标。 一旦创建了句柄,它就一直存在,直到您注销或通过 sp_cursorunprepare 过程显式删除它。
params
标识参数化语句。 变量的参数定义将替换为 语句中的参数标记。 params 是调用 ntext、 nchar 或 nvarchar 输入值的必需参数。 如果语句未参数化,则输入一个 NULL 值。
注意
当 stmt 参数化且 scrollopt PARAMETERIZED_STMT 值为 ON 时,请使用 ntext 字符串作为输入值。
stmt
定义游标结果集。 stmt 参数是必需的,并调用 ntext、nchar 或 nvarchar 输入值。
注意
指定 stmt 值的规则与sp_cursoropen的规则相同,但 stmt 字符串数据类型必须为 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 |
由于请求的值可能不适用于 stmt 定义的游标,因此此参数同时用作输入和输出。 在此类情况下,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 |
与 scrollpt 一样,SQL Server可以分配与请求的值不同的值。
备注
RPC 状态参数为以下值之一:
值 | 说明 |
---|---|
0 | 成功 |
0x0001 | 失败 |
1FF6 | 无法返回元数据。 注意:这样做的原因是 语句不生成结果集;例如,它是 INSERT 或 DDL 语句。 |
示例
下面是使用 sp_cursorprepare 和 sp_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 时,字符串的格式如下所示:
{ <local variable name>**<data type> } [ ,...n ]
另请参阅
sp_cursorexecute (Transact-SQL)
sp_cursoropen (Transact-SQL)
sp_cursorunprepare (Transact-SQL)
系统存储过程 (Transact-SQL)
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈