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_variableOUTPUT
Имя объявленной переменной-курсора для получения результатов. Аргумент output_cursor_variable имеет тип cursor и не имеет значения по умолчанию. Он не может быть связан с какими-либо курсорами во время вызова процедуры sp_describe_cursor_tables. Возвращаемый курсор является прокручиваемым, динамическим и доступным только для чтения.[ @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 инкапсулирует отчет в выходной параметр Transact-SQLcursor. Это позволяет пакетам Transact-SQL, хранимым процедурам и триггерам построчно обрабатывать выходные данные. Это также означает, что процедуру нельзя вызвать напрямую из функций API-интерфейса. Выходной параметр типа cursor должен быть привязан к программной переменной, но API-интерфейсы баз данных не поддерживают привязку параметров cursor или переменных.
В следующей таблице показан формат курсора, возвращенного процедурой sp_describe_cursor_tables.
Имя столбца |
Тип данных |
Описание |
---|---|---|
table owner |
sysname |
Идентификатор пользователя владельца таблицы. |
Table_name |
sysname |
Имя объекта или базовой таблицы. В SQL Server серверные курсоры всегда возвращают объекты, определенные пользователем, а не базовые таблицы. В 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 описывает базовые таблицы, на которые ссылается серверный курсор. Используйте процедуру sp_describe_cursor_columns для описания атрибутов результирующего набора, возвращаемого курсором. Для описания общих характеристик курсора, таких как прокручивание и возможность обновления, используйте процедуру sp_describe_cursor. Для получения списка серверных курсоров Transact-SQL, видимых при соединении, используйте процедуру sp_cursor_list.
Разрешения
Требуется членство в роли public.
Примеры
В следующем примере открывается глобальный курсор, а затем с помощью процедуры sp_describe_cursor_tables выводится список таблиц, на которые курсор ссылается.
USE AdventureWorks2008R2;
GO
-- Declare and open a global cursor.
DECLARE abc CURSOR KEYSET FOR
SELECT LastName
FROM Person.Person
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