sp_describe_cursor_tables (Transact-SQL)

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

Значок ссылки на разделСинтаксические обозначения в 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