sp_cursorprepare (Transact-SQL)

Применимо к:SQL Server

Компилирует инструкцию или пакет курсора в план выполнения, но не создает курсор. Скомпилированная инструкция может позже использоваться процедурой sp_cursorexecute. Эта процедура, в сочетании с sp_cursorexecute, имеет ту же функцию, что и sp_cursoropen, но разделена на два этапа. sp_cursorprepare вызывается путем указания идентификатора = 3 в пакете табличного потока данных (TDS).

Соглашения о синтаксисе Transact-SQL

Синтаксис

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.

Заметка

Используйте строку ntext в качестве входного значения, если stmt параметризуется, а значение scrollopt PARAMETERIZED_STMT имеет значение ON.

stmt
Определяет результирующий набор курсора. Параметр stmt является обязательным и вызывает входное значение ntext, nchar или nvarchar .

Заметка

Правила указания значения stmt совпадают с правилами для sp_cursoropen, за исключением того, что тип данных строки stmt должен быть ntext.

options
Необязательный параметр, возвращающий описание столбцов результирующего набора курсора. для параметров требуется следующее входное значение int .

значение Description
0x0001 RETURN_METADATA

scrollopt
Параметр прокрутки. Scrollopt — это необязательный параметр, который требует одного из следующих входных значений int .

значение Description
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 .

значение Description
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 OPTIMISTIC_ACCEPTABLE

Как и при прокрутке, SQL Server может назначить другое значение, отличное от запрошенного.

Замечания

Параметр состояния RPC может иметь следующие значения.

значение Description
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)