
- •1. Введение. 2
- •2. Заключение. 27
- •3. Список условных обозначений, сокращений. 27
- •4. Список используемой литературы и других источников. 28
- •Введение.
- •Тема 1. Освоение практических методов проектирования и реализации информационных систем.
- •Тема 2. Освоение основ управления современной субд MsSql 2005.
- •1.3 Тема 3. Освоение приемов и эксплуатации и администрирования субд MsSql 2005.
- •Заключение.
Тема 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 |