Административные скрипты MS SQL > Хранимые процедуры курсора (Transact-SQL)
10.04.2013 17:29:25
Наиболее часто встречающиеся слова в статье:
[табличных] [cursor_source] [cursor_identity] [процедуры] [процедурой] [процедура] [курсора] [необходимо] [sp_cursorprepare] [sp_cursoropen]
Статья:
sp_cursor Запрашивает позиционированные обновления. Эта процедура выполняет операции в одной или нескольких строках буфера выборки курсора. Процедура sp_cursorвызывается указанием ID = 1 в пакете потока табличных данных (TDS).
sp_cursor cursor , optype , rownum , table [ , value[...n]]]
Значение |
Имя |
Описание |
---|---|---|
0X0001 |
UPDATE |
Используется для обновления одной или более строк в буфере выборки. К строкам, указанным в параметре rownum, осуществляется повторный доступ, и они обновляются. |
0x0002 |
DELETE |
Используется для удаления одной или более строк в буфере выборки. К строкам, указанным в параметре rownum, осуществляется повторный доступ, и они удаляются. |
0X0004 |
INSERT |
Вставляет данные без создания инструкции INSERT. |
0X0008 |
REFRESH |
Используется для повторного заполнения буфера из базовых таблиц. Может использоваться для обновления строки, если обновление или удаление не удалось провести из-за управления оптимистическим параллелизмом, или после выполнения UPDATE. |
0X10 |
LOCK |
SQL Server вызывает для страницы, содержащей указанную строку, U-блокировку. Эта блокировка совместима с S-блокировками и несовместима с X-блокировками или другими U-блокировками. Может использоваться для краткосрочной блокировки. |
0X20 |
SETPOSITION |
Используется только в случае, если программа содержит последующую инструкцию SQL Server DELETE или UPDATE. |
0X40 |
ABSOLUTE |
Может использоваться только совместно с UPDATE или DELETE. Ключевое слово ABSOLUTE используется только с курсорами KEYSET. Не обрабатывается курсорами DYNAMIC, а курсоры STATIC не допускают обновления. ![]()
Если значение ABSOLUTE указано для строки в ключевом
наборе, которая не попала в выборку, то операция может не
пройти проверку на параллелизм, и правильность возвращаемого
результата не гарантируется.
|
sp_cursorclose Закрывает и удаляет курсор, освобождая все связанные с ним ресурсы. Удаляется временная таблица, которая использовалась для cursor типа KEYSET или STATIC. Для вызова процедуры sp_cursorclose необходимо задать ID = 9 в пакете потока табличных данных (TDS).
sp_cursorclose cursor
sp_cursorexecute Создает и заполняет курсор на основе плана выполнения, который был создан процедурой sp_cursorprepare. Эта процедура в сочетании с процедурой sp_cursorprepare делает то же самое, что процедура sp_cursoropensp_cursoropen, но обработка разбита на два этапа. Для вызова процедуры sp_cursorexecute необходимо задать ID = 4 в пакете потока табличных данных (TDS).
sp_cursorexecute prepared_handle , cursor [ , scrollopt[ OUTPUT ] [ , ccopt[ OUTPUT ] [ ,rowcount OUTPUT [ ,bound param][,...n]]]]]
sp_cursorfetch Извлекает из базы данных буфер из одной или нескольких строк. Группа строк в этом буфере называется буфером выборки курсора. Хранимая процедура sp_cursorfetch вызывается указанием ID = 7 в пакете потока табличных данных (TDS).
sp_cursorfetch cursor [ , fetchtype[ , rownum [ , nrows] ]]
sp_cursor_list Представляет атрибуты серверных курсоров, открытых на данный момент для соединения.
sp_cursor_list [ @cursor_return = ] cursor_variable_name OUTPUT , [ @cursor_scope = ] cursor_scope [;]
sp_cursoropen Открывает курсор. Процедура sp_cursoropen определяет инструкцию SQL, связанную с курсором и параметрами курсора, а затем заполняет курсор. Хранимая процедура sp_cursoropenэквивалентна сочетанию инструкций Transact-SQL DECLARE_CURSOR и OPEN. Для вызова этой процедуры необходимо задать ID =2 в пакете потока табличных данных (TDS)
sp_cursoropen cursor OUTPUT , stmt [, scrollopt[ OUTPUT ] [ , ccopt[ OUTPUT ] [ ,rowcount OUTPUT [ ,boundparam][,...n]]] ]]
.
sp_cursoroptionУстанавливает параметры курсора или возвращает данные о курсоре, созданном хранимой процедурой sp_cursoropen. Для вызова процедуры sp_cursoroption нужно указать ID =8 в пакете потока табличных данных (TDS).
sp_cursoroption cursor , code , value
Значение | Имя | Описание |
---|---|---|
0x0001 | TEXTPTR_ONLY | Возвращает не фактические данные, а текстовый указатель для определенных назначенных столбцов типа text или image. TEXTPTR_ONLY позволяет использовать текстовые указатели как дескрипторы объектов BLOB, которые позже можно выборочно получить или обновить с помощью Transact-SQL или DBLIB (например, инструкции Transact-SQL READTEXT или DBLIB DBWRITETEXT). Если присвоено значение «0», то все столбцы типа text или image из выбранного списка будут возвращать вместо данных текстовые указатели. |
0x0002 | CURSOR_NAME | Назначает курсору имя, указанное в параметре value. Это в свою очередь позволяет интерфейсу ODBC применять позиционированные инструкции Transact-SQL UPDATE и DELETE к курсорам, открываемым процедурой sp_cursoropen. Строка может иметь любой символьный тип данных или UNICODE. Поскольку по умолчанию позиционируемые инструкции Transact-SQL UPDATE и DELETE работают с первой строкой в крупном курсоре, то перед выдачей позиционированной инструкции UPDATE или DELETE необходимо позиционировать курсор с помощью sp_cursor SETPOSITION. |
0x0003 | TEXTDATA | Возвращает фактические данные, а не текстовый указатель для определенных столбцов типа text или image при последующей выборке (т. е. отменяет действие TEXTPTR_ONLY). Если для определенного столбца включен режим TEXTDATA, то выполняется повторная выборка или обновление строки, и после этого можно опять присвоить значение TEXTPTR_ONLY. Как и в случае с TEXTPTR_ONLY, целочисленный параметр значения задает номер столбца. Нулевое значение возвращает все текстовые столбцы или столбцы изображений. |
0x0004 | SCROLLOPT | Параметр прокрутки. Дополнительные сведения см. ниже в разделе «Значения кодов возврата». |
0x0005 | CCOPT | Параметр управления параллелизмом. Дополнительные сведения см. ниже в разделе «Значения кодов возврата». |
0x0006 | ROWCOUNT | Количество строк, находящихся в результирующем наборе. ![]() Если используется асинхронное заполнение, то с момента возвращения значений процедурой sp_cursoropen параметр ROWCOUNT мог измениться. Значение -1 возвращается в том случае, если число строк неизвестно. |
sp_cursorprepare Компилирует инструкцию или пакет курсора в план выполнения, но не создает курсор. Затем скомпилированная инструкция может использоваться процедурой sp_cursorexecute. Эта процедура в сочетании с процедурой sp_cursorexecute делает то же самое, что процедура sp_cursoropen, но обработка разбита на два этапа. Для вызова процедуры sp_cursorprepare необходимо задать ID = 3 в пакете потока табличных данных (TDS).
sp_cursorprepare prepared_handle OUTPUT, params , stmt , options [ , scrollopt[ , ccopt]]
sp_cursorprepexec Компилирует план для переданной инструкции или пакета курсора, после чего создает и заполняет курсор. Процедура sp_cursorprepexec сочетает функции sp_cursorprepare и sp_cursorexecute. Для вызова этой процедуры необходимо задать ID = 5 в пакете потока табличных данных (TDS).
sp_cursorprepexec prepared handle OUTPUT, cursor OUTPUT, params , statement , options [ , scrollopt [ , ccopt [ , rowcount ] ] ]
sp_cursorunprepare Отменяет план выполнения, созданный в хранимой процедуре sp_cursorprepare. Процедура sp_cursorunprepare вызывается при указании ID = 6 в пакете потока табличных данных (TDS).
sp_cursorunprepare handle
sp_describe_cursor Выводит атрибуты серверного курсора.
sp_describe_cursor [ @cursor_return = ] output_cursor_variable OUTPUT { [ , [ @cursor_source = ] N'local' , [ @cursor_identity = ] N'local_cursor_name' ] | [ , [ @cursor_source = ] N'global' , [ @cursor_identity = ] N'global_cursor_name' ] | [ , [ @cursor_source = ] N'variable' , [ @cursor_identity = ] N'input_cursor_variable' ] } [;]
sp_describe_cursor_columns Выдает отчет об атрибутах столбцов результирующего набора серверного курсора.
sp_describe_cursor_columns [ @cursor_return = ] output_cursor_variable OUTPUT { [ , [ @cursor_source = ] N'local' , [ @cursor_identity = ] N'local_cursor_name' ] | [ , [ @cursor_source = ] N'global' , [ @cursor_identity = ] N'global_cursor_name' ] | [ , [ @cursor_source = ] N'variable' , [ @cursor_identity = ] N'input_cursor_variable' ] }
sp_describe_cursor_tables Выводит объекты или базовые таблицы, на которые ссылается серверный курсор.
sp_describe_cursor_tables [ @cursor_return = ] output_cursor_variable OUTPUT { [ , [ @cursor_source = ] N'local' , [ @cursor_identity = ] N'local_cursor_name' ] | [ , [ @cursor_source = ] N'global' , [ @cursor_identity = ] N'global_cursor_name' ] | [ , [ @cursor_source = ] N'variable' , [ @cursor_identity = ] N'input_cursor_variable' ] } [;]
sp_execute Выполняет подготовленную инструкцию Transact-SQL, используя указанный дескриптор и значение необязательного параметра. Процедура sp_execute вызывается путем присвоения значения 12 идентификатору в пакете потока табличных данных (TDS).
sp_execute handle OUTPUT [ ,bound_param ][ ,...n ]]
sp_prepare Подготавливает параметризованную инструкцию Transact-SQL и возвращает дескриптор инструкции для выполнения. Процедура sp_prepare вызывается указанием ID = 11 в пакете потока табличных данных (TDS).
sp_prepare handle OUTPUT, params , stmt , options
sp_prepexec Подготавливает и выполняет параметризованную инструкцию Transact-SQL. В процедуре sp_prepexec сочетаются функции процедур sp_prepare и sp_execute. Вызывается с ID =13 в пакете потока табличных данных (TDS).
sp_prepexec handle OUTPUT, params , stmt [ , bound param ] [ ,...n]]
sp_prepexecrpc Подготавливает и выполняет вызов параметризованной хранимой процедуры, заданной с помощью идентификатора RPC. Для вызова процедуры sp_prepexecrpc необходимо задать ID = 14 в пакете потока табличных данных (TDS).
sp_prepexecrpc handle , OUTPUT RPCCall [ , bound_param ] [ ,...n]]
sp_unprepare Отменяет план выполнения, созданный хранимой процедурой sp_prepare. Процедура sp_unprepare вызывается при указании ID = 15 в пакете потока табличных данных (TDS).
sp_unprepare handle