sp_cursor (Transact-SQL)

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

Запрашивает позиционированные обновления. Эта процедура выполняет операции с одной или несколькими строками в пределах буфера выборки курсора. sp_cursor вызывается путем указания идентификатора = 1 в пакете табличного потока данных (TDS).

Область применения: SQL Server ( SQL Server 2008 (10.0.x) до текущей версии.

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

Синтаксис

  
sp_cursor  cursor, optype, rownum, table  
    [ , value[...n]]]  

Аргументы

курсор
Дескриптор курсора. cursor — это обязательный параметр, вызывающий входное значение int . курсор — это значение дескриптора , созданное SQL Server и возвращаемое процедурой sp_cursoropen.

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

Значение Наименование Описание
0X0001 ОБНОВИТЬ Используется для обновления одной или более строк в буфере выборки. Строки, указанные в rownum , повторно обращаются к ней и обновляются.
0x0002 DELETE Используется для удаления одной или более строк в буфере выборки. Строки, указанные в rownum , повторно обращаются к ней и удаляются.
0X0004 ВСТАВИТЬ Вставляет данные без создания инструкции SQL INSERT .
0X0008 ОБНОВЛЕНИЕ Используется для повторного заполнения буфера из базовых таблиц. Может использоваться для обновления строки, если обновление или удаление не удалось провести из-за управления оптимистическим параллелизмом, или после выполнения UPDATE.
0X10 LOCK Вызывает получение U-lock SQL Server на странице, содержащей указанную строку. Эта блокировка совместима с S-блокировками и несовместима с X-блокировками или другими U-блокировками. Может использоваться для краткосрочной блокировки.
0X20 SETPOSITION Используется только в том случае, если программа будет выдавать следующую инструкцию SQL Server с позицией DELETE или UPDATE.
0X40 ABSOLUTE Может использоваться только совместно с UPDATE или DELETE. ABSOLUTE используется только с курсорами KEYSET (не используется курсорами DYNAMIC, а курсоры STATIC не допускают обновления).

Примечание. Если в наборе ключей указан параметр ABSOLUTE, который не был извлечен, операция может завершиться ошибкой проверки параллелизма, а результат возврата не может быть гарантирован.

rownum
Указывает, с какими строками в буфере выборки будет работать курсор, обновляя или удаляя их.

Заметка

Не оказывает влияния на точку начала любой операции выборки RELATIVE, NEXT или PREVIOUS, а также на операции обновления и удаления, выполняемые с помощью процедуры sp_cursor.

rownum — это обязательный параметр, вызывающий входное значение int .

1
Обозначает первую строку в буфере выборки.

2
Обозначает вторую строку в буфере выборки.

3, 4, 5
Обозначает третью строку и так далее.

n
Обозначает n-ю строку в буфере выборки.

0
Обозначает все строки в буфере выборки.

Заметка

Допустимо только для использования со значениями оптипа UPDATE, DELETE, UPDATE или LOCK.

table
Имя таблицы, определяющей таблицу, к которую применяется оптип, когда определение курсора включает присоединение или неоднозначные имена столбцов возвращаются параметром значения. Если таблица не назначена, то по умолчанию берется первая таблица в предложении FROM. таблица — это необязательный параметр, требующий входного значения строки. Строка может иметь любой символьный тип данных или Юникоде. таблица может быть многокомпонентным именем таблицы.

значение
Используется для вставки или обновления значений. Параметр строки значения используется только со значениями optype UPDATE и INSERT. Строка может иметь любой символьный тип данных или Юникоде.

Заметка

Имена параметров для значения могут быть назначены пользователем.

Значения кода возврата

При использовании RPC позиционированные операции DELETE или UPDATE с номером 0 буфера возвращают сообщение DONE с числом строк 0 (сбой) или 1 (успешно) для каждой строки в буфере получения.

Замечания

Параметр optype

За исключением сочетаний SETPOSITION с UPDATE, DELETE, UPDATE или LOCK; или ABSOLUTE со значением UPDATE или DELETE , значения оптипа являются взаимоисключающими.

Предложение SET значения UPDATE создается из параметра значения .

Одним из преимуществ использования значения optype INSERT является то, что можно избежать преобразования данных, отличных от символов, в формат символов для вставок. Значения указываются так же, как в UPDATE. Если какие-либо обязательные столбцы не включены, то возникает ошибка INSERT.

  • Значение SETPOSITION не влияет на начальную точку любой операции выборки RELATIVE, NEXT или PREVIOUS, так же как и любые обновления или удаления, выполненные с помощью интерфейса sp_cursor. Любое число, не указывающее строку в буфере выборки, приведет к установке позиции в значения 1, при этом сообщение об ошибке не выдается. После выполнения SETPOSITION позиция остается в силе до следующей операции sp_cursorfetch, операции T-SQL FETCH или sp_cursor операции SETPOSITION через тот же курсор. Последующая операция sp_cursorfetch переместит позицию курсора на первую строку в новом буфере выборки, тогда как другие вызовы курсора не повлияют на его позицию. SETPOSITION можно связывать оператором OR с REFRESH, UPDATE, DELETE или LOCK, чтобы установить значение позиции на последнюю измененную строку.

Если строка в буфере получения не указана с помощью параметра rownum , позиция будет иметь значение 1, при этом ошибка не возвращается. После задания позиции она действует до выполнения следующей операции sp_cursorfetch, команды T-SQL FETCH или операции sp_cursor SETPOSITION для того же курсора.

SETPOSITION можно связывать оператором OR с REFRESH, UPDATE, DELETE или LOCK, чтобы установить позицию курсора на последнюю измененную строку.

Параметр rownum

Если задано, параметр rownum можно интерпретировать как номер строки в наборе ключей вместо номера строки в буфере получения. Пользователь отвечает за управление параллелизмом. Это означает, что для курсоров SCROLL_LOCKS придется независимо поддерживать блокировку заданной строки (это можно сделать через транзакции). Для курсоров OPTIMISTIC надо предварительно извлечь строку, чтобы выполнить эту операцию.

Параметр table

Если значение типа optype равно UPDATE или INSERT, а полное обновление или инструкция insert отправляется в качестве параметра значения, значение, указанное для таблицы, игнорируется.

Заметка

Для представлений могут изменяться только участвующие в них таблицы. Имена столбцов параметров значения должны отражать имена столбцов в представлении, но имя таблицы может быть базовой таблицей (в этом случае sp_cursor заменит имя представления).

Параметр value

Существует два варианта правил использования значения , как указано ранее в разделе "Аргументы":

  1. Вы можете использовать имя, предварительно записаемое на имя столбца в списке выбора для любых именованных параметров значения . Одним из преимуществ такого варианта является то, что не обязательно преобразовывать данные.

  2. Используйте параметр для отправки полной инструкции UPDATE или INSERT или использования нескольких параметров для отправки частей инструкции UPDATE или INSERT, которую SQL Server затем будет встраивать в полную инструкцию. Примеры можно найти далее в подразделе «Примеры» этого раздела.

Примеры

Альтернативы использованию параметра value

Для UPDATE:

Когда используется один параметр, инструкцию UPDATE можно передать с использованием следующего синтаксиса:

[ [ UPDATE <table name> ] SET ] {<column name> = expression} [,...n]

Заметка

Если указано имя таблицы UPDATE<, любое значение, указанное для параметра таблицы, будет игнорироваться.>

При использовании нескольких параметров первый параметр должен быть строкой в следующем формате:

[ SET ] <column name> = expression [,...n]

Последующие параметры должны быть в формате:

<column name> = expression [,...n]

В этом случае <имя> таблицы в созданной инструкции обновления является указанным или по умолчанию параметром таблицы .

Для INSERT:

Если используется один параметр, то инструкцию INSERT можно передать с использованием следующего синтаксиса:

[ [ INSERT [INTO] <table name> ] VALUES ] ( <expression> [,...n] )

Заметка

Если указано имя> таблицы INSERT<, любое значение, указанное для параметра таблицы, будет игнорироваться.

При использовании нескольких параметров первый параметр должен быть строкой в следующем формате:

[ VALUES ( ] <expression> [,...n]

Последующие параметры должны быть в формате:

expression [,...n]

За исключением случаев, когда указан параметр VALUES, в этом случае после последнего выражения должен стоять символ ). В этом случае <имя> таблицы в созданной инструкции UPDATE является указанным или по умолчанию параметром таблицы .

Заметка

Возможно передать один параметр как именованный, то есть «@VALUES». В этом случае другие параметры использовать нельзя.

См. также

sp_cursoropen (Transact-SQL)
sp_cursorfetch (Transact-SQL)
Системные хранимые процедуры (Transact-SQL)