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.
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.
Tendo aberto o cursor, use o 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. O SQL Server continua a dar suporte a cursores de servidor de API controlados por conjunto de chaves ou estáticos assíncronos, nos quais OPEN de baixa latência é motivo de preocupação, devido a viagens de ida-e-volta de 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 AdventureWorks.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