Хранимые процедуры курсора (Transact-SQL)

Административные скрипты MS SQL > Хранимые процедуры курсора (Transact-SQL)
10.04.2013 17:29:25



Статья:

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