sp_cursor (Transact-SQL)
Область применения: SQL Server
Запрашивает позиционированные обновления. Эта процедура выполняет операции с одной или несколькими строками в пределах буфера выборки курсора. sp_cursor
вызывается путем ID = 1
указания в пакете табличного потока данных (TDS).
Соглашения о синтаксисе Transact-SQL
Синтаксис
sp_cursor cursor , optype , rownum , table
[ , value [ ...n ] ]
[ ; ]
Аргументы
курсор
Дескриптор курсора. Параметр курсора является int и не может бытьNULL
. Этот параметр представляет собой значение, созданное handle
ядро СУБД и возвращаемое процедуройsp_cursoropen
.
optype
Обязательный параметр, указывающий, какая операция выполняет курсор. Для параметра optype требуется одно из следующих значений.
Значение | Имя | Описание |
---|---|---|
0X0001 |
UPDATE |
Используется для обновления одной или более строк в буфере выборки. Строки, указанные в rownum , обновляются и обновляются. |
0x0002 |
DELETE |
Используется для удаления одной или более строк в буфере выборки. Строки, указанные в rownum , будут повторно доступны и удалены. |
0X0004 |
INSERT |
Вставляет данные без создания инструкции INSERT . |
0X0008 |
REFRESH |
Используется для повторного заполнения буфера из базовых таблиц и может использоваться для обновления строки, если обновление или удаление завершается ошибкой из-за оптимистического элемента управления параллелизмом или после нее UPDATE . |
0X10 |
LOCK |
Приводит к получению блокировки обновления (U) на странице, содержащей указанную строку. Эта блокировка совместима с общими блокировками (S), но не с эксклюзивными блокировками (X) или другими блокировками обновлений. Может использоваться для краткосрочной блокировки. |
0X20 |
SETPOSITION |
Используется только в том случае, если программа будет выдавать последующие DELETE инструкции или UPDATE инструкции. |
0X40 |
ABSOLUTE |
Можно использовать только с UPDATE или DELETE . ABSOLUTE используется только с KEYSET курсорами (игнорируется для DYNAMIC курсоров), а STATIC курсоры не могут быть обновлены.Примечание. Если ABSOLUTE указана строка в наборе ключей, который не был извлечен, операция может завершиться ошибкой проверки параллелизма и результат возврата не может быть гарантирован. |
rownum
Указывает, какие строки в буфере получения курсор работает, обновляется или удаляется. Этот параметр не влияет на начальную точку любой операции , NEXT
или PREVIOUS
получения, ни каких-либо RELATIVE
обновлений или удалений, выполненных с помощьюsp_cursor
.
rownum — это обязательный параметр, вызывающий входное значение int .
1
Обозначает первую строку в буфере выборки.
2, 3, 4, ...n
Обозначает вторую, третью и четвертую строку и т. д.
0
Обозначает все строки в буфере выборки.
Этот параметр действителен только для использования со значениями UPDATE
optype или LOCK
optypeDELETE
REFRESH
.
table
Имя таблицы, определяющей таблицу, к которую применяется оптип , когда определение курсора включает соединение или неоднозначные имена столбцов возвращаются параметром значения . Если определенная таблица не указана, по умолчанию используется первая таблица в предложении FROM
. Параметр таблицы является необязательным и требует строкового входного значения. Строка может быть указана как любой символ или тип данных Юникода или имя таблицы с несколькими частьми.
значение
Используется для вставки или обновления значений. Параметр строки значения используется только со значениями UPDATE
optype.INSERT
Строка может иметь любой символьный тип данных или UNICODE.
Имена параметров для значения могут быть назначены пользователем.
Значения кода возврата
0
(успешно) или 1
(сбой).
Замечания
Параметр optype
За исключением сочетаний SETPOSITION
с UPDATE
, DELETE
REFRESH
или LOCK
с ABSOLUTE
или с UPDATE
DELETE
значениями оптипа, являются взаимоисключающими.
Предложение SET
UPDATE
значения создается из параметра значения .
Одним из преимуществ использования INSERT <optype>
значения является то, что вы можете избежать преобразования данных, отличных от символов, в формат символов для вставок. Значения задаются таким же образом, как UPDATE
и . Если какие-либо обязательные столбцы не включены, происходит сбой INSERT
.
- Значение
SETPOSITION
не влияет на начальную точку любойRELATIVE
операции ,NEXT
а такжеPREVIOUS
не выполняет никаких обновлений или удаленийsp_cursor
, выполняемых с помощью интерфейса. Любое число, не указывающее строку в буфере получения, приводит к тому, что позиция задана1
без возврата ошибки. ПослеSETPOSITION
выполнения позиция остается в силе до следующейsp_cursorfetch
операции, операции T-SQLFETCH
илиsp_cursor
SETPOSITION
операции через тот же курсор. Следующаяsp_cursorfetch
операция задает положение курсора первой строке в новом буфере получения, а другие вызовы курсора не влияют на значение позиции.SETPOSITION
Может быть связана предложениемOR
сREFRESH
,UPDATE
DELETE
илиLOCK
, чтобы задать значение позиции последней измененной строке.
Если строка в буфере получения не указана с помощью параметра rownum , позиция имеет значение 1, при этом ошибка не возвращается. После установки позиции он остается в силе до следующей sp_cursorfetch
операции, операции T-SQL FETCH
или sp_cursor
SETPOSITION
операции на том же курсоре.
SETPOSITION
можно связать предложение с REFRESH
предложением OR
, UPDATE
DELETE
или LOCK
задать положение курсора в последней измененной строке.
Параметр rownum
Если задано, параметр rownum можно интерпретировать как номер строки в наборе ключей вместо номера строки в буфере получения. Пользователь отвечает за управление параллелизмом. Это означает, что для SCROLL_LOCKS
курсоров необходимо независимо поддерживать блокировку заданной строки (которая может выполняться с помощью транзакции). Для OPTIMISTIC
курсоров необходимо ранее получить строку для выполнения этой операции.
Параметр таблицы
Если значение optype равно UPDATE
или INSERT
полное обновление или инструкция insert отправляется в качестве параметра значения, значение, указанное для таблицы, игнорируется.
Примечание.
В отношении представлений может быть изменена только одна таблица, участвующая в представлении. Имена столбцов параметров значения должны отражать имена столбцов в представлении, но имя таблицы может быть базовой таблицей (в этом случае sp_cursor
заменяет имя представления).
Параметр значения
Существует два варианта правил использования значения , как указано ранее в разделе "Аргументы":
Имя столбца
@
в списке выбора можно использовать для любых именованных параметров значения . Одним из преимуществ этой альтернативы является то, что преобразование данных может не потребоваться.Используйте параметр для отправки полной
UPDATE
или инструкции илиINSERT
использования несколькихUPDATE
параметров для отправки частей илиINSERT
инструкции, которые ядро СУБД затем встраивает в полную инструкцию. Примеры можно найти в разделе "Примеры" далее в этой статье.
Примеры
Альтернативный параметр значения используется
Обновление
При использовании UPDATE
одного параметра оператор может быть отправлен с помощью следующего синтаксиса:
[ [ UPDATE <table_name> ] SET ] { <column name> = expression } [ , ...n ]
Если UPDATE <table_name>
задано, любое значение, указанное для параметра таблицы , игнорируется.
При использовании нескольких параметров первый параметр должен быть строкой в следующем формате:
[ SET ] <column name> = expression [ , ...n ]
Последующие параметры должны находиться в виде следующих параметров:
<column name> = expression [ , ...n ]
В этом случае <table_name>
в созданной инструкции обновления используется один из указанных или по умолчанию параметров таблицы .
Для INSERT
При использовании INSERT
одного параметра оператор может быть отправлен с помощью следующего синтаксиса:
[ [ INSERT [ INTO ] <table_name> ] VALUES ] ( <expression> [ , ...n ] )
Если INSERT <table_name>
задано, любое значение, указанное для параметра таблицы , игнорируется.
При использовании нескольких параметров первый параметр должен быть строкой в следующем формате:
[ VALUES ] ( <expression> [ , ...n ] )
Последующие параметры должны быть в виде expression [ , ...n ]
, за исключением того, где VALUES
был указан, в этом случае должен быть конечный после )
последнего выражения. В этом случае <table_name>
в созданной UPDATE
инструкции используется один из указанных или по умолчанию параметров таблицы .
Примечание.
Например, @values
можно отправить один параметр в качестве именованного параметра. В этом случае другие именованные параметры не могут использоваться.