Поделиться через


sp_describe_cursor_tables (Transact-SQL)

Область применения: SQL Server

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

Соглашения о синтаксисе Transact-SQL

Синтаксис

sp_describe_cursor_tables
    [ @cursor_return = ] cursor_return OUTPUT
    , [ @cursor_source = ] { N'local' | N'global' | N'*cursor_source*' }
    , [ @cursor_identity = ] N'cursor_identity'
[ ; ]

Аргументы

[ @cursor_return = ] cursor_return OUTPUT

Имя объявленной переменной курсора для получения выходных данных курсора. @cursor_return является курсором OUTPUT без значения по умолчанию и не должен быть связан с какими-либо курсорами во время sp_describe_cursor_tables вызова. Возвращаемый курсор является прокручиваемым, динамическим и доступным только для чтения.

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

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

[ @cursor_identity = ] N'cursor_identity'

Если @cursor_sourcelocal, @cursor_identity — это имя курсора, созданного оператором DECLARE CURSOR LOCAL с ключевым словом или значением по умолчаниюLOCAL.

Если @cursor_sourceglobal, @cursor_identity — это имя курсора, созданного оператором DECLARE CURSOR GLOBAL с ключевым словом или значением по умолчаниюGLOBAL. @cursor_identity также может быть именем курсора сервера API, открываемого приложением ODBC, который затем назвал курсор путем вызоваSQLSetCursorName.

Если @cursor_sourcevariable, @cursor_identity — это имя переменной курсора, связанной с открытым курсором.

@cursor_identity — nvarchar(128), без значения по умолчанию.

Значения кода возврата

Нет.

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

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

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

Имя столбца Тип данных Description
table_owner sysname Идентификатор пользователя владельца таблицы.
table_name sysname Имя объекта или базовой таблицы. В SQL Server курсоры сервера всегда возвращают указанный пользователем объект, а не базовые таблицы.
optimizer_hint smallint Растровое изображение, состоящее из одного или нескольких следующих параметров:

1 = блокировка на уровне строк (ROWLOCK)
4 = блокировка на уровне страницы (PAGELOCK)
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 AdventureWorks2022;
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