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


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;