sp_cursorprepexec (Transact-SQL)
Область применения: SQL Server
База данных SQL Azure
Azure Synapse Analytics Analytics
Platform System (PDW)
Компилирует план для переданной инструкции или пакета курсора, после чего создает и заполняет курсор. sp_cursorprepexec
объединяет функции sp_cursorprepare
и sp_cursorexecute
. Эта процедура вызывается путем ID = 5
указания в пакете табличного потока данных (TDS).
Соглашения о синтаксисе Transact-SQL
Синтаксис
sp_cursorprepexec prepared handle OUTPUT , cursor OUTPUT , params , statement , options
[ , scrollopt [ , ccopt [ , rowcount ] ] ]
[ , '@parameter_name [ , ...n ]' ]
Аргументы
подготовленный дескриптор
Созданный идентификатор подготовленного дескриптора SQL Server. подготовленный дескриптор является обязательным и возвращает int.
курсор
Созданный идентификатор курсора SQL Server. курсор является обязательным параметром, который должен быть предоставлен во всех последующих процедурах, которые действуют на этом курсоре , например sp_cursorfetch
.
params
Указывает параметризованные инструкции. Определение параметров переменных заменено маркерами параметров в инструкции. params — это обязательный параметр, который вызывает входное значение ntext, nchar или nvarchar .
Примечание.
Используйте строку ntext в качестве входного значения, если инструкция параметризована, а значение scrollopt PARAMETERIZED_STMT имеет значение ON.
инструкция
Определяет результирующий набор курсора. Параметр инструкции является обязательным и вызывает входное значение ntext, nchar или nvarchar .
Примечание.
Правила указания значения инструкции совпадают с правилами, что и для sp_cursoropen
, за исключением того, что тип данных строки инструкции должен быть 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 |
Из-за возможности, что запрошенный параметр не подходит для курсора, определенного инструкцией, этот параметр служит как входными, так и выходными данными. В таких случаях 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 | OPTIMISTIC_ACCEPTABLE |
Как и при прокрутке, SQL Server может назначить другое значение, отличное от запрошенного.
строка
Необязательный параметр, указывающий количество строк буфера получения, используемых с AUTO_FETCH. Значение по умолчанию составляет 20 строк. Строка ведет себя по-разному при назначении в качестве входного значения и возвращаемого значения.
Как входное значение | Как возвращаемое значение |
---|---|
При указании AUTO_FETCH с помощью FAST_FORWARD курсоров строка представляет количество строк, которые нужно поместить в буфер получения. | Представляет число строк в результирующем наборе. При указании значения прокрутки AUTO_FETCH строка возвращает количество строк, которые были извлекались в буфер получения. |
parameter_name
Задает одно или несколько имен параметров, определенных в аргументе params . Для каждого параметра, включенного в params, должен быть указан параметр. Этот аргумент не требуется, если инструкция Transact-SQL или пакетная служба в парамах не имеет параметров.
Значения кода возврата
Если параметр возвращает значение NULL, инструкция не параметризована.
Примеры
В этом примере показано использование sp_cursorprepexec
. Он выполняет запрос к Person
таблице в AdventureWorks2022
базе данных, возвращая все записи, в которых имя — Katherine.
USE AdventureWorks2022;
GO
DECLARE @prep_handle INT,
@cursor INT,
@scrollopt INT = 4104,
@ccopt INT = 8193,
@rowcnt INT;
EXEC sp_cursorprepexec
@prep_handle OUTPUT,
@cursor OUTPUT,
N'@fName nvarchar(100)',
N'SELECT FirstName, LastName FROM Person.Person WHERE FirstName = @fName',
@scrollopt,
@ccopt,
@rowcnt OUTPUT,
'Katherine';
EXEC sp_cursorfetch @cursor;