sp_cursoropen cursor OUTPUT
, stmt
[ , scrollopt [ OUTPUT ]
[ , ccopt [ OUTPUT ]
[ , rowcount OUTPUT [ , boundparam ] [ , ...n ] ] ] ]
[ ; ]
cursor
SQL Server 生成的游标标识符。 游标 是 handle
必须在涉及游标的所有后续过程中提供的值,例如 sp_cursorfetch
。 游标参数为 int,不能NULL
为 。
游标 允许多个游标在单个数据库连接上处于活动状态。
定义游标结果集的必需参数。 任何字符串类型(无论 Unicode、size 等)的任何有效查询字符串(语法和绑定)都可以用作有效的 stmt 值类型。
滚动选项。 scrollopt 参数为 int,默认值NULL
为 ,可以是下列值之一。
boundparam
表示使用额外参数。 boundparam 是一个可选参数,如果 scrollopt PARAMETERIZED_STMT
值设置为 ON
,则应指定此参数。
返回代码值
如果未引发错误, sp_cursoropen
则返回以下值之一。
sp_cursoropen
如果过程成功执行,则发送具有 TDS 列格式信息(0xa0
和消息)的 RPC 返回参数和0xa1
结果集。 如果不成功,则发送一条或多条 TDS 错误消息。 在任一情况下,都未返回行数据,消息 DONE
计数为 0
。 0x81
返回 standard for SELECT
语句0xa5 > 和 0xa4
标记流。
stmt 参数
如果 stmt 指定存储过程的执行,则输入参数可以定义为常量作为 stmt 字符串的一部分,或指定为 boundparam 参数。 通过此方法,可以将声明的变量作为绑定参数传递。
stmt 参数的允许内容取决于 ccopt ALLOW_DIRECT
返回值是否链接到 OR
ccopt 值的其余部分:
ALLOW_DIRECT
如果未指定,则必须使用对包含单个SELECT
语句的存储过程调用的 Transact-SQL SELECT
或EXECUTE
语句。 此外,语句 SELECT
必须限定为游标;也就是说,它不能包含关键字 SELECT INTO
或 FOR BROWSE
。
如果 ALLOW_DIRECT
已指定,则可能会导致一个或多个 Transact-SQL 语句,包括使用多个语句执行其他存储过程的语句。 SELECT
非语句或任何SELECT
包含关键字SELECT INTO
或FOR BROWSE
执行的语句,并且不会导致创建游标。 对于包含在一批多个语句中的任何 SELECT
语句也是如此。 SELECT
如果语句包含仅适用于游标的子句,则忽略这些子句。 例如,当 ccopt 的值为0x2002
时,这是请求:
如果只有一个 SELECT
语句限定为游标,则具有滚动锁的游标,或者
如果有多个语句、单个非SELECT
语句或 SELECT
不限定为游标的语句,则直接执行语句。
前五个滚动值(KEYSEY
、、DYNAMIC
FORWARD_ONLY
、STATIC
和FAST_FORWARD
)互斥。
PARAMETERIZED_STMT
可以 CHECK_ACCEPTED_TYPES
链接到 OR
前五个值中的任何一个。
AUTO_FETCH
和 AUTO_CLOSE
可链接到 OR
FAST_FORWARD
。
ON
如果是CHECK_ACCEPTED_TYPES
,则最后五个滚动值(KEYSET_ACCEPTABLE
、、FORWARD_ONLY_ACCEPTABLE
DYNAMIC_ACCEPTABLE
或STATIC_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
一。
ON
如果是CHECK_ACCEPTED_TYPES
,则最后四个 ccopt 值(READ_ONLY_ACCEPTABLE
SCROLL_LOCKS_ACCEPTABLE
和其中一个OPTIMISTIC_ACCEPTABLE
值)中至少有一个也必须为 ON。
UPDATE
定位和DELETE
函数只能在提取缓冲区内执行,并且仅当 ccopt 值等于SCROLL_LOCKS
或 OPTIMISTIC
。 如果 SCROLL_LOCKS
为指定值,则保证操作成功。 如果 OPTIMISTIC
为指定值,则如果自上次提取以来行发生更改,则操作将失败。
此失败的原因是,当指定值时 OPTIMISTIC
,通过比较时间戳或校验和值(由 SQL Server 确定)来执行乐观货币控制函数。 如果这些行中的任何一行不匹配,操作将失败。
指定 UPDT_IN_PLACE
为返回值可控制以下结果:
如果在对具有唯一索引的表执行定位更新时未设置,游标会从其工作表中删除该行,并将其插入游标使用的任何键列的末尾,这会更改这些列。
如果设置 ON
,游标将更新工作表中原始行中的键列。
bound_param参数
根据代码中的错误消息,参数名称在指定时PARAMETERIZED_STMT
应为 paramdef。 PARAMETERIZED_STMT
如果未指定,错误消息中未指定任何名称。
RPC 注意事项
RPC RETURN_METADATA
输入标志可以设置为 0x0001
请求在 TDS 流中返回游标选择列表元数据。
A. bound_param参数
第五个参数之后的任何参数都将作为输入参数传递到语句计划。 第一个此类参数必须是以下形式的字符串:
<parameter_name> <data_type> [ ,... n ]
后续参数用于传递要替换为 <parameter_name>
语句中的值。
sp_cursorfetch (Transact-SQL)
系统存储过程 (Transact-SQL)