Поделиться через


sp_cursorprepare (Transact-SQL)

Область применения: SQL Server

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

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

Синтаксис

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

Аргументы

prepared_handle

Подготовленный 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

Возвращает описание столбцов результирующего набора курсоров. Параметр 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

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

Замечания

Параметр состояния RPC является одним из следующих значений:

значение Описание
0 Удачное завершение
0x0001 Сбой
1FF6 Не удалось вернуть метаданные.

Примечание. Причина этого заключается в том, что инструкция не создает результирующий набор. Например, это INSERT инструкция DDL или инструкция 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 и значении ONscrollopt PARAMETERIZED_STMT формат строки находится в следующей форме:

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