sp_cursorprepare (Transact-SQL)

适用范围:SQL Server

将游标语句或批处理编译为执行计划,但不创建游标。 稍后可以使用 sp_cursorexecute编译的语句。 此过程与 sp_cursorexecute此过程具有相同的功能 sp_cursoropen,但分为两个阶段。 sp_cursorprepare 通过在表格数据流(TDS)数据包中指定 ID = 3 来调用。

Transact-SQL 语法约定

语法

sp_cursorprepare prepared_handle OUTPUT , params , stmt , options
    [ , scrollopt [ , ccopt ] ]
[ ; ]

参数

prepared_handle

一个 SQL Server 生成的准备 handle 标识符,该标识符返回 int 值。

然后,prepared_handle 提供给过程 sp_cursorexecute 以打开游标。 创建句柄后,该句柄就会存在,直到注销,或者通过过程显式删除它 sp_cursorunprepare

params

标识参数化语句。 变量的参数定义将替换为语句中的参数标记。 params 是调用 ntextnchar 或 nvarchar 输入值的必需参数。 NULL如果未参数化语句,则输入值。

参数化 stmt 且 scrollopt PARAMETERIZED_STMT 值为 ON 时,请使用 ntext 字符串作为输入值。

stmt

定义游标结果集。 stmt 参数是必需的,并调用 ntext、**nchar 或 nvarchar 输入值。

指定 stmt 值的规则与指定 stmt 值的规则相同sp_cursoropen,但 stmt 字符串数据类型必须为 ntext 除外

options

返回游标结果集列的说明。 options 参数为 int,默认值为 NULL. 设置为时 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 OPTIMISTIC (以前称为 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 OPTIMISTIC_ACCEPTABLE

scrollpt 一样,SQL Server 可以分配与所请求的值不同的值。

注解

RPC 状态参数是以下值之一:

说明
0 成功
0x0001 失败
1FF6 无法返回元数据。

注意: 这是因为该语句不生成结果集;例如,它是一个 INSERT 或 DDL 语句。

示例

以下代码是一个使用 sp_cursorpreparesp_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,字符串的格式采用以下格式:

<parameter_name> <data_type> [ ,... n ]