OPEN (Transact-SQL)

Abre um cursor de servidor Transact-SQL e popula o cursor executando a instrução Transact-SQL especificada na instrução DECLARE CURSOR ou SET cursor_variable.

Ícone de vínculo de tópicoConvenções de sintaxe Transact-SQL

Sintaxe

OPEN { { [ GLOBAL ] cursor_name } | cursor_variable_name }

Argumentos

  • GLOBAL
    Especifica que cursor_name se refere a um cursor global.

  • cursor_name
    É o nome do cursor declarado. Se um cursor global e um cursor local existirem tendo cursor_name por nome, cursor_name fará referência ao cursor global quando GLOBAL for especificado; caso contrário, cursor_name fará referência ao cursor local.

  • cursor_variable_name
    É o nome de uma variável de cursor que faz referência a um cursor.

Comentários

Se o cursor for declarado com a opção INSENSITIVE ou STATIC, OPEN criará uma tabela temporária para manter o conjunto de resultados. OPEN falha quando o tamanho de qualquer linha no conjunto de resultados excede o tamanho máximo de linha para tabelas do SQL Server. Se o cursor for declarado com a opção KEYSET, OPEN criará uma tabela temporária para manter o conjunto de chaves. As tabelas temporárias são armazenadas em tempdb.

Após um cursor ter sido aberto, use a função @@CURSOR_ROWS para receber o número de linhas qualificadas no último cursor aberto.

ObservaçãoObservação

O SQL Server não oferece suporte à geração de cursores Transact-SQL estáticos ou direcionados por conjuntos de chaves de forma assíncrona. Operações de cursor Transact-SQL como OPEN ou FETCH são processadas em lote, assim não há necessidade de geração assíncrona de cursores Transact-SQL. O SQL Server continua a oferecer suporte a cursores assíncronos de servidor de API (interface de programação de aplicativos), estáticos ou direcionados por conjunto de chaves, onde OPEN de baixa latência é uma preocupação devido às viagens de ida e volta do cliente em cada operação de cursor.

Exemplos

O exemplo a seguir abre um cursor e busca todas as linhas.

DECLARE Employee_Cursor CURSOR FOR
SELECT LastName, FirstName
FROM AdventureWorks2008R2.HumanResources.vEmployee
WHERE LastName like 'B%';

OPEN Employee_Cursor;

FETCH NEXT FROM Employee_Cursor;
WHILE @@FETCH_STATUS = 0
BEGIN
    FETCH NEXT FROM Employee_Cursor
END;

CLOSE Employee_Cursor;
DEALLOCATE Employee_Cursor;