OPEN (Transact-SQL)

Abre un cursor del servidor Transact-SQL y lo llena ejecutando la instrucción Transact-SQL especificada en la instrucción DECLARE CURSOR o SET cursor_variable.

Icono de vínculo a temasConvenciones 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 existe un cursor global y uno local con el nombre 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.

Comentarios

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 admite la generación asincrónica de cursores Transact-SQL controlados por conjunto de claves o estáticos. Las operaciones de cursor de Transact-SQL, como OPEN o FETCH, se realizan por lotes, por lo que no es necesaria la generación asincrónica de cursores Transact-SQL. SQL Server mantiene la compatibilidad con los cursores de servidor de interfaz de programación de aplicaciones (API) controlados por conjunto de claves o estáticos, donde OPEN de latencia baja representa un problema debido a los ciclos de ida y vuelta del cliente en cada operación de cursor.

Ejemplos

Este ejemplo abre un cursor y busca todas sus filas.

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;