sp_cursorprepare (Transact-SQL)

适用于SQL Server

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

Transact-SQL 语法约定

语法

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

参数

prepared_handle
一个 SQL Server 生成的准备 句柄 标识符,该标识符返回整数值。

注意

随后向sp_cursorexecute过程提供prepared_handle以打开游标。 一旦创建了句柄,它就一直存在,直到您注销或通过 sp_cursorunprepare 过程显式删除它。

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

注意

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

stmt
定义游标结果集。 stmt 参数是必需的,并调用 ntextnchar 或 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 时,字符串的格式如下所示:

{ <本地变量名称>**<数据类型> } [ ,...n ]

另请参阅

sp_cursorexecute (Transact-SQL)
sp_cursoropen (Transact-SQL)
sp_cursorunprepare (Transact-SQL)
系统存储过程 (Transact-SQL)