Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otchet_po_preddiplomnoy_praktike (2).docx
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
393.85 Кб
Скачать
    1. Тема 2. Освоение основ управления современной субд MsSql 2005.

Задание: Разработать техническую документацию по теме «Хранимые процедуры курсора (Transact-SQL) в СУБД MsSQL 2005».

Microsoft SQL Server 2005 поддерживает следующие системные хранимые процедуры, реализующие функциональность переменной-курсора.

sp_cursor_list

sp_describe_cursor_columns

sp_describe_cursor

sp_describe_cursor_tables

sp_cursor_list (Transact-SQL)

Представляет атрибуты серверных курсоров, открытых на данный момент для соединения.

Синтаксис

sp_cursor_list [ @cursor_return = ] cursor_variable_name OUTPUT

, [ @cursor_scope = ] cursor_scope

Аргументы

[ @cursor_return = ] cursor_variable_name OUTPUT

Имя переменной объявленного курсора. Аргумент cursor_variable_name имеет тип cursor и не имеет значения по умолчанию. Этот аргумент является динамическим, перемещаемым и предназначенным только для чтения.

[ @cursor_scope = ] cursor_scope

Указывает уровень курсоров для отчета. Аргумент cursor_scope имеет тип int, не имеет значения по умолчанию и может иметь одно из следующих значений.

Значение

Описание

1

Представить все локальные курсоры.

2

Представить все глобальные курсоры.

3

Представить как локальные, так и глобальные курсоры.

Замечания

Хранимая процедура sp_cursor_list представляет список текущих серверных курсоров, открытых соединением, и описывает атрибуты, являющиеся глобальными по отношению к

каждому курсору, такие как возможность прокрутки и обновления курсора. Курсоры, представленные в хранимой процедуре sp_cursor_list, включают:

серверные курсоры Transact-SQL;

серверные курсоры API, открывающиеся приложением ODBC, которое затем называется

SQLSetCursorName для именования курсора.

Используйте хранимую процедуру sp_describe_cursor_columns для описания атрибутов

результирующего набора, возвращаемого курсором. Используйте хранимую процедуру

sp_describe_cursor_tables для отчета по базовым таблицам, на которые ссылается курсор.

Хранимая процедура sp_describe_cursor предоставляет такие же сведения, как и процедура sp_cursor_list, но только для определенного курсора.

Разрешения

Разрешение на выполнение по умолчанию для роли public.

Возвращаемые курсоры

Хранимая процедура sp_cursor_list возвращает свой отчет в виде выходного аргумента курсора Transact-SQL, не в виде результирующего набора. Позволяет пакетам, хранимым процедурам и триггерам Transact-SQL работать с выходными данными по одной строке за раз. Это также означает, что процедуру нельзя вызвать напрямую из API-функций базы данных. Параметр выходного курсора должен быть привязан к программной переменной, но API-интерфейсы баз данных не поддерживают привязку параметров курсора или переменных.

Формат курсора, возвращаемого хранимой процедурой sp_cursor_list. Формат курсора такой же, как и формат, возвращаемый хранимой процедурой sp_describe_cursor.

Имя столбца

Тип данных

Описание

reference_name

sysname

Имя, используемое для ссылки на курсор. Если ссылка на курсор осуществлялась по имени, приведенном в инструкции DECLARE CURSOR, то имя ссылки и имя курсора одинаковы. Если ссылка на курсор осуществлялась при помощи переменной, именем ссылки является имя переменной курсора.

cursor_name

sysname

Имя курсора из инструкции DECLARE CURSOR. В SQL Server 2005, если курсор создан с помощью присваивания переменной курсора,

cursor_name возвращает имя переменной курсора. В предыдущих выпусках этот выходной столбец возвращает имя, созданное системой.

cursor_scope

smallint

1 = LOCAL

2 = GLOBAL

status

smallint

Теже значения, какие представлены системной функцией

CURSOR_STATUS.

1 = курсор, указанный ссылкой в имени или переменной курсора, открыт. Если курсор нечувствительный, статичный или является набором ключей, он имеет, по крайней мере, одну строку. Если курсор динамический, результирующий набор имеет ноль или более строк.

0 = курсор, указанный ссылкой в имени или переменной курсора, открыт, но не имеет строк. Динамические курсоры не возвращают это значение.

-1 = курсор, указанный ссылкой в имени или переменной курсора, закрывается.

-2 = применимо только к переменным курсора. Нет курсора, назначенного переменной. Возможно, параметр OUTPUT назначил курсор переменной, но хранимая процедура закрыла курсор перед возвратом.

-3 = курсор или переменная курсора с заданным именем не существует либо переменной не выделен курсор.

model

smallint

1 = нечувствительный (или статичный)

2 = набор ключей

3 = динамический

4 = перемотка вперед

concurrency

smallint

1 = только для чтения

2 = блокирование прокрутки

3 = оптимистический

scrollable

smallint

0 = только вперед

1 = прокручиваемый

open_status

smallint

0 = закрыт

1 = открыт

cursor_rows

int

Количество уточняющих строк в результирующем наборе.

fetch_status

smallint

Состояние последней выборки по данному курсору.

0 = выборка завершена успешно.

-1 = выборка завершена ошибкой или за пределами границ курсора.

-2 = запрошенная строка отсутствует.

-9 = выборка по курсору не произведена.

column_count

smallint

Количество столбцов в результирующем наборе курсора.

row_count

smallint

Количество строк, затронутых последней операцией с курсором.

last_operation

smallint

Последняя операция, выполненная с данным курсором:

0 = операции над курсором не выполнялись;

1 = OPEN;

2 = FETCH;

3 = INSERT;

4 = UPDATE;

5 = DELETE;

6 = CLOSE;

7 = DEALLOCATE.

cursor_handle

int

Уникальное значение, определяющее курсор в пределах области сервера.

Примеры

В следующем примере открывается глобальный курсор и используется процедура

sp_cursor_list для получения отчета об атрибутах курсора.

USE AdventureWorks

GO

-- Declare and open a keyset-driven cursor.

DECLARE abc CURSOR KEYSET FOR

SELECT LastName

FROM Person.Contact

WHERE LastName LIKE 'S%'

OPEN abc

-- Declare a cursor variable to hold the cursor output variable

-- from sp_cursor_list.

DECLARE @Report CURSOR

-- Execute sp_cursor_list into the cursor variable.

EXEC master.dbo.sp_cursor_list @cursor_return = @Report OUTPUT,

@cursor_scope = 2

-- Fetch all the rows from the sp_cursor_list output cursor.

FETCH NEXT from @Report

WHILE (@@FETCH_STATUS <> -1)

BEGIN

FETCH NEXT from @Report

END

-- Close and deallocate the cursor from sp_cursor_list.

CLOSE @Report

DEALLOCATE @Report

GO

-- Close and deallocate the original cursor.

CLOSE abc

DEALLOCATE abc

GO

sp_describe_cursor_columns (Transact-SQL)

Выдает отчет об атрибутах столбцов результирующего набора серверного курсора.

Синтаксис

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' ]

}

Аргументы

[ @cursor_return = ] output_cursor_variable OUTPUT

Имя переменной-курсора для получения результатов. Аргумент output_cursor_variable имеет тип cursor и не имеет значения по умолчанию. Аргумент не может быть связан с какими-либо курсорами во время вызова процедуры sp_describe_cursor_columns. Возвращаемый курсор является прокручиваемым, динамическим и доступным только для чтения.

[ @cursor_source = ] { N'local' | N'global' | N'variable' }

Указывает, задан ли возвращаемый курсор с помощью имени локального курсора, глобального курсора или курсорной переменной. Тип данного аргумента nvarchar(30).

[ @cursor_identity = ] N'local_cursor_name'

Имя курсора, созданного инструкцией DECLARE CURSOR с ключевым словом LOCAL или параметром LOCAL по умолчанию. Аргумент local_cursor_name имеет тип nvarchar(128).

[ @cursor_identity = ] N'global_cursor_name'

Имя курсора, созданного инструкцией DECLARE CURSOR с ключевым словом GLOBAL или параметром GLOBAL по умолчанию. Аргумент global_cursor_name имеет тип nvarchar(128).

Аргумент global_cursor_name также может представлять собой имя серверного курсора API, открытого приложением ODBC и затем именованного вызовом SQLSetCursorName.

[ @cursor_identity = ] N'input_cursor_variable'

Имя переменной курсорного типа, связанной с открытым курсором. Аргумент input_cursor_variable имеет тип nvarchar(128).

Замечания

Процедура sp_describe_cursor_columns описывает атрибуты столбцов в результирующем наборе серверного курсора, такие как имя и тип данных, для каждого курсора. Процедура sp_describe_cursor используется для получения описания глобальных атрибутов серверного курсора. Процедура sp_describe_cursor_tables используется для получения отчета по базовым таблицам, на которые ссылается курсор. Для получения отчета по серверным курсорам Transact-SQL, видимым в соединении, используется процедура sp_cursor_list.

Разрешения

Требует членства в роли public.

Возвращенные курсоры

Процедура sp_describe_cursor_columns инкапсулирует отчет в виде выходного аргумента cursor языка Transact-SQL. Это позволяет пакетам Transact-SQL, хранимым процедурам и триггерам построчно обрабатывать выходные данные. Это также означает, что процедуру нельзя вызывать непосредственно из функций API баз данных. Выходной аргумент cursor должен быть привязан к переменной, а в программных интерфейсах баз данных привязка аргументов или переменных типа cursor не поддерживается.

В следующей таблице приводится описание курсора, возвращаемого с помощью процедуры

sp_describe_cursor_columns.

Имя столбца

Тип данных

Описание

column_name

sysname (обнуляемое)

Имя, назначенное столбцу результирующего набора. Столбец принимает значение NULL, если он был задан без сопутствующего предложения AS.

ordinal_position

int

Позиция столбца относительно крайнего левого столбца в результирующем наборе. Первый столбец находится в позиции 0.

column_characteristics_flags

int

Позиция столбца относительно крайнего левого столбца в результирующем наборе. Первый столбец находится в позиции 0. Битовая маска параметров, хранящихся в переменной DBCOLUMNFLAGS OLE DB.

Может представлять собой одно из следующих значений или их сочетание.

1 = Закладка

2 = Фиксируемая длина

4 = Обнуляемый

8 = Управление версиями строк

16 = Обновляемый столбец (устанавливается для проецируемых столбцов курсора, не имеющего предложения FOR UPDATE. Если таковой столбец имеется, то аргумент может указываться только один раз для курсора).

При сочетании битовых значений применяются характеристики комбинируемых значений. Например, если битовое значение равно 6, столбец имеет фиксированную длину (2) и является обнуляемым (4).

column_size

int

Предельно допустимый размер значения данного столбца.

data_type_sql

smallint

Число, определяющее тип данных SQL Server данного столбца.

column_precision

tinyint

Предельная точность столбца, соответствующая значению bPrecision в OLE DB.

column_scale

tinyint

Число знаков справа от десятичного разделителя для типов данных numeric и decimal,

cоответствующее значению bScale в OLE DB.

order_position

int

Если столбец участвует в сортировке результирующего набора, позиция столбца в ключе сортировки относительно крайнего левого столбца.

order_direction

varchar(1) (обнуляемый)

A — Столбец входит в ключ сортировки, которая производится по возрастанию.

D — Столбец входит в ключ сортировки, которая производится по убыванию.

NULL — Столбец не участвует в сортировке.

hidden_column

smallint

0 — Данный столбец отображается в списке выбора.

1 = Зарезервировано для использования в будущем.

columnid

int

Идентификатор базового столбца. Если столбец

Результирующего набора вычисляется,

значение columnid равно -1.

objectid

int

Идентификатор объекта или базовой таблицы,

служащих источником столбца.

Если столбец результирующего набора вычисляется,

значение objectid равно -1.

dbid

int

Идентификатор базы данных, в которой находится

таблица этого столбца.Если столбец результирующего

набора вычисляется, значение dbid равно -1.

dbname

sysname (обнуляемый)

Имя базы данных, содержащей базовую таблицу,

служащую источником столбца. Если столбец результирующего набора вычисляется, значение dbname равно NULL.

Примеры

Следующий пример иллюстрирует получение глобального курсора и использование процедуры

sp_describe_cursor_columns для формирования отчета по столбцам этим курсором.

USE AdventureWorks;

GO

-- Declare and open a global cursor.

DECLARE abc CURSOR KEYSET FOR

SELECT LastName

FROM Person.Contact

GO

OPEN abc

-- Declare a cursor variable to hold the cursor output variable

-- from sp_describe_cursor_columns.

DECLARE @Report CURSOR

-- Execute sp_describe_cursor_columns into the cursor variable.

EXEC master.dbo.sp_describe_cursor_columns

@cursor_return = @Report OUTPUT,

@cursor_source = N'global', @cursor_identity = N'abc'

-- Fetch all the rows from the sp_describe_cursor_columns output cursor.

FETCH NEXT from @Report

WHILE (@@FETCH_STATUS <> -1)

BEGIN

FETCH NEXT from @Report

END

-- Close and deallocate the cursor from sp_describe_cursor_columns.

CLOSE @Report

DEALLOCATE @Report

GO

-- Close and deallocate the original cursor.

CLOSE abc

DEALLOCATE abc

GO

sp_describe_cursor (Transact-SQL)

Выводит атрибуты серверного курсора.

Синтаксис

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' ]

}

Аргументы

[ @cursor_return = ] output_cursor_variable OUTPUT

Имя объявленной переменной для получения выходных данных курсора. Аргумент output_cursor_variable имеет тип cursor, не имеет значения по умолчанию и не должен быть связан ни с одним курсором при вызове

процедуры sp_describe_cursor. Возвращенный курсор имеет свойства scrollable, dynamic и read-only.

[ @cursor_source = ] { N'local' | N'global' | N'variable' }

Задает, был ли переданный курсор определен с помощью имени локального курсора, глобального курсора или переменной курсора. Аргумент имеет тип nvarchar(30).

[ @cursor_identity = ] N'local_cursor_name' ]

Имя курсора, созданного с помощью инструкции DECLARE CURSOR, которая либо содержала ключевое слово LOCAL, либо выполнялась при установке по умолчанию LOCAL. Аргумент local_cursor_name имеет тип nvarchar(128).

[ @cursor_identity = ] N'global_cursor_name' ]

Имя курсора, созданного с помощью инструкции DECLARE CURSOR, которая либо содержала ключевое слово GLOBAL, либо выполнялась при установке по умолчанию GLOBAL. Аргумент global_cursor_name имеет тип nvarchar(128).

Аргумент global_cursor_name может также быть именем серверного курсора API, открытого приложением ODBC и названного с помощью функции SQLSetCursorName.

[ @cursor_identity = ] N'input_cursor_variable' ]

Имя переменной, связанной с открытым курсором. Аргумент input_cursor_variable имеет тип nvarchar(128).

Замечания

Процедура sp_describe_cursor описывает такие глобальные для серверного курсора атрибуты как возможность прокрутки и обновления. Используйте процедуру sp_describe_cursor_columns для описания атрибутов

результирующего набора, возвращаемого курсором. Используйте процедуру sp_describe_cursor_tables для

получения отчета о базовых таблицах, на которые ссылается курсор. Для получения отчета о серверных курсорах языка Transact-SQL, видимых при подключении, воспользуйтесь процедурой sp_cursor_list.

Инструкция DECLARE CURSOR может затребовать тип курсора, который не поддерживается SQL Server с помощью инструкции SELECT, содержащейся в DECLARE CURSOR. SQL Server неявно преобразует курсор к

типу, который может поддерживаться с использованием инструкции SELECT. Если в инструкции DECLARE

CURSOR указано TYPE_WARNING, SQL Server посылает в приложение информационное сообщение о завершении преобразования. Процедура sp_describe_cursor может быть вызвана для определения типа полученного курсора.

Разрешения

Необходимо быть членом роли public.

Возвращенные курсоры

Процедура sp_describe_cursor помещает результирующий набор в выходной параметр Transact-SQL cursor.

Это позволяет пакетам, хранимым процедурам и триггерам Transact-SQL работать с отдельной строкой. Это

также означает, что процедуру нельзя вызывать напрямую из API-функций, предназначенных для работы с

базами данных. Выходной параметр cursor должен быть привязан к программной переменной, но API-функции для работы с базами данных не поддерживают связывание параметров cursor или переменных.

В приведенной ниже таблице показан формат курсора, возвращенного процедурой sp_describe_cursor. Формат курсора такой же, что и формат, возвращаемый процедурой sp_cursor_list.

Имя столбца

Тип данных

Описание

reference_name

sysname

Имя, используемое для ссылки на курсор. Если ссылка на курсор осуществлялась с помощью имени, указанного в инструкции DECLARE CURSOR, имя ссылки совпадает с именем курсора. Если ссылка на курсор осуществлялась через переменную, имя ссылки совпадает с именем переменной.

cursor_name

sysname

Имя курсора из инструкции DECLARE CURSOR. В SQL Server 2005 в случае,

если курсор был создан с помощью присвоения переменной курсора, cursor_name возвращает имя переменной курсора. В более ранних версиях

SQL Server этот выходной столбец возвращает имя, формируемое системой.

cursor_scope

tinyint

1 = LOCAL

2 = GLOBAL

status

int

Те же значения, которые получены с помощью системной функции

CURSOR_STATUS.

1 = курсор, на который ссылается имя курсора или переменная, открыт. Если курсор имеет тип insensitive, static или keyset, он содержит по крайней

мере одну строку. В динамическом курсоре результирующий набор может иметь ноль или более строк.

0 = курсор, на который ссылается имя курсора или переменная, открыт, но

не содержит строк. Динамические курсоры никогда не возвращают это значение.

-1 = курсор, на который ссылается имя курсора или переменная, закрыт.

-2 = применяется только к переменным курсора. Отсутствует курсор, связанный с переменной. Возможно, с помощью параметра OUTPUT курсор

был связан с переменной, но хранимая процедура закрыла курсор перед

возвратом.

-3 = курсор или переменная курсора с заданным именем не существует либо с переменной не связан курсор.

model

tinyint

1 = Не учитывать (статическая)

2 = Набор ключей

3 = Динамическая

4 = Перемотка вперед

concurrency

tinyint

1 = Только для чтения

2 = Блокировка прокруток

3 = Оптимистично

scrollable

tinyint

0 = Только вперед

1 = Возможна прокрутка

open_status

tinyint

0 = Закрыт

1 = Открыт

cursor_rows

decimal(10,0)

Количество выбранных строк в результирующем наборе.

fetch_status

smallint

Состояние последней выборки данного курсора.

0 = выборка завершена успешно.

-1 = выборка завершена ошибкой или вышла за пределы курсора.

-2 = запрошенная строка отсутствует.

-9 = выборка по курсору не произведена.

column_count

smallint

Количество столбцов в результирующем наборе курсора.

row_count

decimal(10,0)

Количество строк, затронутых последней операцией курсора.

last_operation

tinyint

Последняя операция, выполненная над курсором.

0 = операции над курсором не выполнялись.

1 = OPEN

2 = FETCH

3 = INSERT

4 = UPDATE

5 = DELETE

6 = CLOSE

7 = DEALLOCATE

cursor_handle

int

Уникальное значение для курсора в пределах сервера.

Примеры

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

USE AdventureWorks;

GO

-- Declare and open a global cursor.

DECLARE abc CURSOR STATIC FOR

SELECT LastName

FROM Person.Contact

OPEN abc

-- Declare a cursor variable to hold the cursor output variable

-- from sp_describe_cursor.

DECLARE @Report CURSOR

-- Execute sp_describe_cursor into the cursor variable.

EXEC master.dbo.sp_describe_cursor @cursor_return = @Report OUTPUT,

@cursor_source = N'global', @cursor_identity = N'abc'

-- Fetch all the rows from the sp_describe_cursor output cursor.

FETCH NEXT from @Report

WHILE (@@FETCH_STATUS <> -1)

BEGIN

FETCH NEXT from @Report

END

-- Close and deallocate the cursor from sp_describe_cursor.

CLOSE @Report

DEALLOCATE @Report

GO

-- Close and deallocate the original cursor.

CLOSE abc

DEALLOCATE abc

GO

sp_describe_cursor_tables (Transact-SQL)

Выводит объекты или базовые таблицы, на которые ссылается серверный курсор.

Синтаксис

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' ]

}

Аргументы

[ @cursor_return = ] output_cursor_variable OUTPUT

Имя объявленной переменной курсора для получения выходного курсора. Аргумент output_cursor_variable имеет тип cursor и не имеет значения по умолчанию, он не должен быть связан с каким-либо курсором при вызове процедуры sp_describe_cursor_tables. Возвращенный курсор имеет свойства scrollable, dynamic и read-only.

[ @cursor_source = ] { N'local'| N'global' | N'variable' }

Задает, был ли переданный курсор определен с помощью имени локального курсора, глобального курсора или переменной курсора. Этот аргумент имеет тип nvarchar(30).

[ @cursor_identity = ] N'local_cursor_name'

Имя курсора, созданного с помощью инструкции DECLARE CURSOR, содержащей ключевое слово LOCAL, либо выполняющейся при установленном по умолчанию значении LOCAL. Аргумент local_cursor_name имеет тип nvarchar(128).

[ @cursor_identity = ] N'global_cursor_name'

Имя курсора, созданного с помощью инструкции DECLARE CURSOR, содержащей ключевое слово GLOBAL, либо выполняющейся при установленном по умолчанию значении GLOBAL. Аргумент global_cursor_name также может быть именем серверного курсора API, открытого приложением ODBC, которое затем дало имя курсору, вызвав SQLSetCursorName. Аргумент global_cursor_name имеет тип nvarchar(128).

[ @cursor_identity = ] N'input_cursor_variable'

Имя переменной, связанной с открытым курсором. Аргумент input_cursor_variable имеет тип nvarchar(128).

Замечания

Процедура sp_describe_cursor_tables описывает базовые таблицы, на которые ссылается серверныйкурсор. Используйте процедуру sp_describe_cursor_columns для описания атрибутов результирующего набора, возвращаемого курсором. Для описания общих характеристик курсора, таких как прокручивание и способность к обновлению, используйте процедуру sp_describe_cursor. Для получения

отчета о серверных курсорах Transact-SQL, видимых при соединении, используйте процедуру sp_cursor_list.

Разрешения

Необходимо быть членом роли public.

Возвращенные курсоры

Процедура sp_describe_cursor_tables помещает отчет в выходной параметр Transact-SQL cursor.

Это позволяет пакетам, хранимым процедурам и триггерам Transact-SQL работать с отдельной строкой. Это также означает, что процедуру нельзя вызвать напрямую из API-функций. Выходной параметр cursor должен быть привязан к программной переменной, но API-интерфейсы не поддерживают связанные параметры или переменные cursor.

В следующей таблице показан формат курсора, возвращенного процедурой

sp_describe_cursor_tables.

Имя столбца

Тип данных

Описание

table owner

sysname

Идентификатор пользователя владельца таблицы.

Table_name

sysname

Имя объекта или базовой таблицы. В SQL Server 2005 серверные

курсоры всегда возвращают объекты, определенные пользователем, а не базовые таблицы. В SQL Server 2000 серверные курсоры

возвращают базовые таблицы, если при создании представления

или функции не использовалось предложение WITH

VIEW_METADATA.

Optimizer_hints

smallint

Битовая схема одного или нескольких следующих значений.

1 = Блокировка на уровне строк (ROWLOCK).

4 = Блокировка на уровне страниц (ROWLOCK).

8 = Блокировка таблицы (TABLOCK).

16 = Монопольная блокировка таблицы (TABLOCKX).

32 = Блокировка обновления (UPDLOCK).

64 = Нет блокировки (NOLOCK).

128 = Параметр перемотки первой строки (FASTFIRST).

4096 = Считать повторяемую семантику с помощью DECLARE CURSOR (HOLDLOCK).

При предоставлении нескольких параметров система использует

параметр с наибольшими ограничениями. Однако процедура

sp_describe_cursor_tables отображает флаги, которые указываются в запросе.

lock_type

smallint

Тип блокировки прокрутки, запрашиваемый явно или неявно для

каждой базовой таблицы, на которой основан данный курсор.

Значение может быть одним из следующих.

0 = Нет.

1 = Общее.

3 = Обновление.

server_name

sysname, nullable

Имя связанного сервера, на котором находится таблица. NULL,

если используются предложения OPENQUERY или

OPENROWSET.

Objectid

int

Идентификатор объекта таблицы. 0, если используются предложения OPENQUERY или OPENROWSET.

dbid

int

Идентификатор базы данных, в которой находится таблица. 0, если используются предложения OPENQUERY или OPENROWSET.

dbname

sysname, nullable

Имя базы данных, в которой находится таблица. NULL, если

используются предложения OPENQUERY или OPENROWSET.

Примеры

В следующем примере открывается глобальный курсор, а затем с помощью процедуры sp_describe_cursor_tables выводится список таблиц, на которые курсор ссылается.

USE AdventureWorks

GO

-- Declare and open a global cursor.

DECLARE abc CURSOR KEYSET FOR

SELECT LastName

FROM Person.Contact

WHERE LastName LIKE 'S%'

OPEN abc

GO

-- Declare a cursor variable to hold the cursor output variable

-- from sp_describe_cursor_tables.

DECLARE @Report CURSOR

-- Execute sp_describe_cursor_tables into the cursor variable.

EXEC master.dbo.sp_describe_cursor_tables

@cursor_return = @Report OUTPUT,

@cursor_source = N'global', @cursor_identity = N'abc'

-- Fetch all the rows from the sp_describe_cursor_tables output cursor.

FETCH NEXT from @Report

WHILE (@@FETCH_STATUS <> -1)

BEGIN

FETCH NEXT from @Report

END

-- Close and deallocate the cursor from sp_describe_cursor_tables.

CLOSE @Report

DEALLOCATE @Report

GO

-- Close and deallocate the original cursor.

CLOSE abc

DEALLOCATE abc

GO