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 и значении ON
scrollopt PARAMETERIZED_STMT
формат строки находится в следующей форме:
<parameter_name> <data_type> [ ,... n ]