Compartilhar via


OPEN (Transact-SQL)

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure

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.

Convenções de sintaxe de 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 com cursor_name como seus nomes, cursor_name se referirá ao cursor global quando GLOBAL for especificado, caso contrário, cursor_name se referirá 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ção

O SQL Server não oferece suporte à geração de cursores controlados por conjunto de chaves ou cursores estáticos Transact-SQL de forma assíncrona. Operações de cursor Transact-SQL, como OPEN ou FETCH, são em lote, de modo que não é preciso gerar cursores de Transact-SQL assincronamente. SQL Server continua a dar suporte a cursores de servidor de API (interface de programação de aplicativo) estáticos ou controlados por conjunto de chaves assíncronos nos quais OPEN de baixa latência é uma preocupação devido às viagens de ida e volta do cliente para 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 AdventureWorks2022.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;  

Consulte Também

CLOSE (Transact-SQL)
@@CURSOR_ROWS (Transact-SQL)
DEALLOCATE (Transact-SQL)
DECLARE CURSOR (Transact-SQL)
FETCH (Transact-SQL)