Compartir vía


OPEN (Transact-SQL)

Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance

Abre un cursor de servidor de Transact-SQL y lo rellena mediante la ejecución de la instrucción Transact-SQL especificada en la instrucción DECLARE CURSOR o SET cursor_variable.

Convenciones de sintaxis de Transact-SQL

Sintaxis

OPEN { { [ GLOBAL ] cursor_name } | cursor_variable_name }  

Argumentos

GLOBAL
Especifica que cursor_name hace referencia a un cursor global.

cursor_name
Es el nombre de un cursor declarado. Si existen un cursor global y otro local denominados cursor_name, cursor_name hace referencia al cursor global si se especifica GLOBAL; en caso contrario, cursor_name hace referencia al cursor local.

cursor_variable_name
Es el nombre de la variable cursor que hace referencia a un cursor.

Observaciones

Si se declara el cursor con la opción INSENSITIVE o STATIC, OPEN crea una tabla temporal para mantener el conjunto de resultados. OPEN produce un error si el tamaño de cualquier fila en el conjunto de resultados excede el tamaño máximo de fila para las tablas de SQL Server. Si el cursor se declara con la opción KEYSET, OPEN crea una tabla temporal para mantener el conjunto de claves. Las tablas temporales se almacenan en tempdb.

Después de abrir un cursor, utilice la función @@CURSOR_ROWS para recuperar el número de filas habilitadas en el último cursor abierto.

Nota:

SQL Server no es compatible con la generación asíncrona de cursores de Transact-SQL estáticos o controlados por conjuntos de claves. Las operaciones de cursor de Transact-SQL como OPEN o FETCH se procesan por lotes, por lo que la generación asincrónica de cursores de Transact-SQL no es necesaria. SQL Server sigue admitiendo los cursores de servidor de la interfaz de programación de aplicaciones (API) estáticos o controlados por conjuntos de claves asincrónicos en los que OPEN de baja latencia es un problema, debido a los recorridos de ida y vuelta al cliente para cada operación del cursor.

Ejemplos

Este ejemplo abre un cursor y busca todas sus filas.

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;  

Vea también

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