sp_describe_cursor (Transact-SQL)
Выводит атрибуты серверного курсора.
Синтаксические обозначения 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. Возвращаемый курсор является прокручиваемым, динамическим и доступным только для чтения.[ @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 помещает результирующий набор в выходной параметр Transact-SQLcursor. Это позволяет пакетам Transact-SQL, хранимым процедурам и триггерам построчно обрабатывать выходные данные. Это также означает, что процедуру нельзя вызывать непосредственно из функций API баз данных. Выходной параметр типа cursor должен быть привязан к программной переменной, но API-интерфейсы баз данных не поддерживают привязку параметров cursor или переменных.
В приведенной ниже таблице показан формат курсора, возвращенного процедурой sp_describe_cursor. Формат курсора такой же, что и формат, возвращаемый процедурой sp_cursor_list.
Имя столбца |
Тип данных |
Описание |
---|---|---|
reference_name |
sysname |
Имя, используемое для ссылки на курсор. Если ссылка на курсор осуществлялась с помощью имени, указанного в инструкции DECLARE CURSOR, имя ссылки совпадает с именем курсора. Если ссылка на курсор осуществлялась через переменную, имя ссылки совпадает с именем переменной. |
cursor_name |
sysname |
Имя курсора из инструкции DECLARE CURSOR. В SQL Server, если курсор создан с помощью присваивания переменной курсора, cursor_name возвращает имя переменной курсора. В более ранних версиях SQL Server этот выходной столбец возвращает имя, формируемое системой. |
cursor_scope |
tinyint |
1 = LOCAL 2 = GLOBAL |
status |
int |
Те же значения, которые получены с помощью системной функции CURSOR_STATUS. 1 = курсор, указанный ссылкой в имени или переменной курсора, открыт. Если курсор нечувствительный, статичный или является набором ключей, он имеет, по крайней мере, одну строку. Если курсор динамический, результирующий набор имеет ноль или более строк. 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) |
Количество выбранных строк в результирующем наборе. Дополнительные сведения см. в разделе @@CURSOR_ROWS (Transact-SQL). |
fetch_status |
smallint |
Состояние последней выборки данного курсора. Дополнительные сведения см. в разделе @@FETCH_STATUS (Transact-SQL). 0 = выборка завершена успешно. -1 = выборка завершена с ошибкой или вышла за пределы курсора. -2 = запрошенная строка отсутствует. -9 = выборка по курсору не произведена. |
column_count |
smallint |
Количество столбцов в результирующем наборе курсора. |
row_count |
decimal(10,0) |
Количество строк, затронутых последней операцией курсора. Дополнительные сведения см. в разделе @@ROWCOUNT (Transact-SQL). |
last_operation |
tinyint |
Последняя операция, выполненная над курсором. 0 = операции c курсором не выполнялись. 1 = OPEN; 2 = FETCH; 3 = INSERT 4 = UPDATE 5 = DELETE 6 = CLOSE 7 = DEALLOCATE |
cursor_handle |
int |
Уникальное значение для курсора в пределах сервера. |
Замечания
Процедура 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 для получения отчета об атрибутах курсора.
USE AdventureWorks2012;
GO
-- Declare and open a global cursor.
DECLARE abc CURSOR STATIC FOR
SELECT LastName
FROM Person.Person;
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_columns (Transact-SQL)
sp_describe_cursor_tables (Transact-SQL)