sys.sp_describe_cursor (Transact-SQL)

Aplica-se a: SQL Server

Reporta os atributos de um cursor de servidor.

Transact-SQL convenções de sintaxe

Syntax

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

Arguments

[ @cursor_return = ] cursor_return SAÍDA

O nome de uma variável de cursor declarada para receber a saída do cursor. @cursor_return é um OUTPUT parâmetro do tipo int, sem padrão, e não deve estar associado a nenhum cursor no momento sp_describe_cursor em que é chamado. O cursor devolvido é um cursor rolável, dinâmico e apenas de leitura.

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

Especifica se o cursor reportado é especificado usando o nome de um cursor local , um cursor global ou uma variável de cursor. @cursor_source é nvarchar(30), sem padrão.

[ @cursor_identity = ] N'cursor_identity'

O nome de um cursor criado por uma DECLARE CURSOR instrução. @cursor_identity é nvarchar(128), sem padrão.

  • Se o cursor tiver a LOCAL palavra-chave, ou estiver por defeito para LOCAL, @cursor_identity é local.

  • Se o cursor tiver a GLOBAL palavra-chave, ou estiver por defeito para GLOBAL, @cursor_identity é global. @cursor_identity também pode ser o nome de um cursor de servidor API aberto por uma aplicação ODBC, e depois nomeado ao chamar SQLSetCursorName.

  • Caso contrário, @cursor_identity é o nome de uma variável cursor associada a um cursor aberto.

Valores de código de retorno

Nenhum.

Os cursores regressaram

sp_describe_cursor encapsula o seu conjunto de resultados num parâmetro de saída Transact-SQL cursor . Isto permite que Transact-SQL lotes, procedimentos armazenados e triggers trabalhem com a saída uma linha de cada vez. Isto também significa que o procedimento não pode ser chamado diretamente a partir das funções da API da base de dados. O cursor parâmetro de saída deve estar ligado a uma variável do programa, mas as APIs da base de dados não suportam parâmetros ou variáveis de ligação cursor .

A tabela seguinte mostra o formato do cursor que é devolvido usando sp_describe_cursor. O formato do cursor é o mesmo que o formato devolvido usando sp_cursor_list.

Nome da coluna Tipo de dados Descrição
reference_name sysname O nome referia-se ao cursor. Se a referência ao cursor fosse através do nome especificado numa DECLARE CURSOR instrução, o nome da referência é o mesmo que o nome do cursor. Se a referência ao cursor fosse através de uma variável, o nome da referência é o nome da variável.
cursor_name sysname Nome do cursor de uma DECLARE CURSOR afirmação. Se o cursor foi criado ao definir uma variável cursor para um cursor, cursor_name devolve o nome da variável cursor. Em versões anteriores do SQL Server, esta coluna de saída devolve um nome gerado pelo sistema.
cursor_scope tinyint 1 = LOCAL
2 = GLOBAL
status int Mesmos valores reportados pela CURSOR_STATUS função do sistema:

1 = O cursor referenciado pelo nome ou variável do cursor está aberto. Se o cursor for insensível, estático ou com teclado, é pelo menos uma linha. Se o cursor for dinâmico, o conjunto de resultados tem zero ou mais linhas.
0 = O cursor referenciado pelo nome ou variável do cursor está aberto mas não tem linhas. Os cursores dinâmicos nunca retornam este valor.
-1 = O cursor referenciado pelo nome ou variável do cursor está fechado.
-2 = Aplica-se apenas a variáveis de cursor. Não há cursor atribuído à variável. Possivelmente, um OUTPUT parâmetro atribuía um cursor à variável, mas o procedimento armazenado fechava o cursor antes de regressar.
-3 = Um cursor ou variável cursor com o nome especificado não existe, ou a variável cursor não tem um cursor atribuído.
model tinyint 1 = Insensível (ou estático)
2 = Conjunto de teclas
3 = Dinâmico
4 = Avanço Rápido
concurrency tinyint 1 = Apenas leitura
2 = Fechaduras de pergaminho
3 = Otimista
scrollable tinyint 0 = Apenas para a frente
1 = Rolável
open_status tinyint 0 = Fechado
1 = Aberto
cursor_rows decimal(10,0) Número de linhas de qualificação no conjunto de resultados. Para mais informações, consulte @@CURSOR_ROWS.
fetch_status smallint Estado do último fetch neste cursor. Para mais informações, consulte @@FETCH_STATUS.

0 = Buscar bem-sucedido.
-1 = Busca falhou ou está fora dos limites do cursor.
-2 = A linha solicitada está em falta.
-9 = Não ocorreu qualquer busca no cursor.
column_count smallint Número de colunas no conjunto de resultados do cursor.
row_count decimal(10,0) Número de linhas afetadas pela última operação no cursor. Para mais informações, veja @@ROWCOUNT.
last_operation tinyint Última operação realizada no cursor:

0 = Não foram realizadas operações no cursor.
1 = OPEN
2 = FETCH
3 = INSERT
4 = UPDATE
5 = DELETE
6 = CLOSE
7 = DEALLOCATE
cursor_handle int Um valor único para o cursor dentro do âmbito do servidor.

Remarks

sp_describe_cursor descreve os atributos que são globais para um cursor de servidor, como a capacidade de deslocar e atualizar. Use sp_describe_cursor_columns para uma descrição dos atributos do conjunto de resultados devolvidos pelo cursor. Use sp_describe_cursor_tables para um relatório das tabelas base referenciadas pelo cursor. Para obter um relatório dos Transact-SQL cursores do servidor visíveis na ligação, use sp_cursor_list.

Uma DECLARE CURSOR instrução pode pedir um tipo de cursor que o SQL Server não consegue suportar usando a SELECT instrução contida no DECLARE CURSOR. O SQL Server converte implicitamente o cursor para um tipo que pode suportar usando a SELECT instrução. Se TYPE_WARNING for especificado na DECLARE CURSOR instrução, o SQL Server envia à aplicação uma mensagem informativa de que a conversão foi concluída. sp_describe_cursor pode então ser chamado para determinar o tipo de cursor que foi implementado.

Permissões

Requer adesão à função pública de .

Examples

O exemplo seguinte abre um cursor global e é usado sp_describe_cursor para reportar os atributos do cursor.

USE AdventureWorks2022;
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 AS CURSOR;

-- Execute sp_describe_cursor into the cursor variable.
EXECUTE 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