Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Область применения: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
Указывает, какие строки в буфере получения курсор работает, обновляется или удаляется. Этот параметр не влияет на начальную точку любой операции , RELATIVEили NEXT получения, ни каких-либо PREVIOUSобновлений или удалений, выполненных с помощьюsp_cursor.
rownum — это обязательный параметр, вызывающий входное значение int .
1Обозначает первую строку в буфере выборки.
2, 3, 4, ...nОбозначает вторую, третью и четвертую строку и т. д.
0Обозначает все строки в буфере выборки.
Этот параметр действителен только для использования со значениями UPDATEoptype или DELETEoptypeREFRESHLOCK.
table
Имя таблицы, определяющей таблицу, к которую применяется оптип , когда определение курсора включает соединение или неоднозначные имена столбцов возвращаются параметром значения . Если определенная таблица не указана, по умолчанию используется первая таблица в предложении FROM . Параметр таблицы является необязательным и требует строкового входного значения. Строка может быть указана как любой символ или тип данных Юникода или имя таблицы с несколькими частьми.
значение
Используется для вставки или обновления значений. Параметр строки значения используется только со значениями UPDATE optype.INSERT Строка может иметь любой символьный тип данных или UNICODE.
Имена параметров для значения могут быть назначены пользователем.
Значения кода возврата
0 (успешно) или 1 (сбой).
Замечания
Параметр optype
За исключением сочетаний SETPOSITION с UPDATE, DELETEREFRESHили LOCKс ABSOLUTE или с UPDATEDELETEзначениями оптипа, являются взаимоисключающими.
Предложение SETUPDATE значения создается из параметра значения .
Одним из преимуществ использования INSERT <optype> значения является то, что вы можете избежать преобразования данных, отличных от символов, в формат символов для вставок. Значения задаются таким же образом, как UPDATEи . Если какие-либо обязательные столбцы не включены, происходит сбой INSERT .
- Значение
SETPOSITIONне влияет на начальную точку любойRELATIVEоперации ,NEXTа такжеPREVIOUSне выполняет никаких обновлений или удаленийsp_cursor, выполняемых с помощью интерфейса. Любое число, не указывающее строку в буфере получения, приводит к тому, что позиция задана1без возврата ошибки. ПослеSETPOSITIONвыполнения позиция остается в силе до следующейsp_cursorfetchоперации, операции T-SQLFETCHилиsp_cursorSETPOSITIONоперации через тот же курсор. Следующаяsp_cursorfetchоперация задает положение курсора первой строке в новом буфере получения, а другие вызовы курсора не влияют на значение позиции.SETPOSITIONМожет быть связана предложениемORсREFRESH,UPDATEDELETEилиLOCK, чтобы задать значение позиции последней измененной строке.
Если строка в буфере получения не указана с помощью параметра rownum , позиция имеет значение 1, при этом ошибка не возвращается. После установки позиции он остается в силе до следующей sp_cursorfetch операции, операции T-SQL FETCH или sp_cursorSETPOSITION операции на том же курсоре.
SETPOSITIONможно связать предложение с ORпредложением REFRESH , UPDATEDELETEили 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можно отправить один параметр в качестве именованного параметра. В этом случае другие именованные параметры не могут использоваться.