Extracción SQL
Recupera filas específicas a través de un cursor del servidor Transact-SQL.
Convención de sintaxis de Transact-SQL
Sintaxis
Obtener
[ [siguiente|anterior|primero|último
|Absoluta { n | @nvar }
| RELATIVA { n | @nvar }
]
De
] p>
{ {[global] nombre del cursor} | @nombre de la variable del cursor}
[INTO @variable_name [,...n]] parámetros
Entonces
devuelve la fila de resultados inmediatamente después de la fila actual, y la fila actual se incrementa hasta la fila devuelta. Si FETCH NEXT es la primera operación de recuperación en el cursor, se devuelve la primera fila del conjunto de resultados. A continuación se muestran las opciones predeterminadas de adquisición del cursor.
Anterior; anterior
Devuelve la fila de resultado inmediatamente antes de la fila actual, y la fila actual se reduce a la fila devuelta. Si FETCH PRIOR es la primera operación FETCH en el cursor, no se devolverán filas y el cursor se colocará antes de la primera fila.
Primero
Devuelve la primera fila del cursor como la fila actual.
Último
Devuelve la última fila del cursor como la fila actual.
Absoluto { n | @nvar}
Si n o @nvar es positivo, se devuelve la enésima fila hacia atrás desde el encabezado del cursor y la fila devuelta se convierte en la nueva fila actual. Si n o @nvar es negativo, se devuelve la enésima fila desde el final del cursor y la fila devuelta se convierte en la nueva fila actual. Si n o @nvar es 0, no se devuelve ninguna fila. n debe ser una constante entera y el tipo de datos de @nvar debe ser smallint, tinyint o int.
Relativo { n | @nvar}
Si n o @nvar es positivo, se devuelve la enésima fila después de la fila actual y la fila devuelta se convierte en la nueva fila actual. Si n o @nvar es negativo, se devuelve la enésima fila desde la fila actual y la fila devuelta se convierte en la nueva fila actual. Si n o @nvar es 0, se devuelve la fila actual. La primera vez que se recupera un cursor, si se especifica FETCH RELATIVE cuando n o @nvar se establece en negativo o 0, no se devolverá ninguna fila. n debe ser una constante entera y el tipo de datos de @nvar debe ser smallint, tinyint o int.
Global
Especifique cursor_name para hacer referencia al cursor global.
Nombre del cursor
El nombre del cursor abierto del que se extraerá. Si tanto el cursor global como el cursor local usan nombre_cursor como nombre, cuando se especifica GLOBAL, nombre_cursor se refiere al cursor global; si no se especifica GLOBAL, nombre_cursor se referirá al cursor local;
@cursor_variablename
Hace referencia al nombre de la variable del cursor del que se extraerá el cursor abierto.
INTO @variable_name[,...n]
Permite que los datos de las columnas para las operaciones de extracción se coloquen en variables locales. Cada variable de la lista está asociada de izquierda a derecha con la columna correspondiente en el conjunto de resultados del cursor. El tipo de datos de cada variable debe coincidir con el tipo de datos de la columna del conjunto de resultados correspondiente o una conversión implícita admitida por el tipo de datos de la columna del conjunto de resultados. El número de variables debe ser el mismo que el número de columnas en la lista de selección del cursor.
Comentarios
NEXT es la única opción FETCH admitida si la opción SCROLL no se especifica en una instrucción DECLARE CURSOR de estilo ISO. Todas las opciones de extracción son compatibles si la opción SCROLL se especifica en una instrucción DECLARE CURSOR de estilo ISO.
Si utiliza la extensión de cursor DECLARE de Transact-SQL, se aplican las siguientes reglas:
Si se especifica FORWARD_ONLY o FAST_FORWARD, NEXT es la única opción de recuperación admitida.
Si no se especifica ninguna opción DYNAMIC, FORWARD_ONLY o FAST_FORWARD, y se especifica una de KEYSET, STATIC o SCROLL, se admiten todas las opciones de extracción.
El cursor de desplazamiento dinámico admite todas las opciones de extracción excepto la absoluta.
La función @@FETCH_STATUS informa el estado de la última declaración FETCH. La misma información se registra en la columna fetch_status del cursor devuelto por sp_describe_cursor. Esta información de estado debe usarse para determinar la validez de los datos devueltos por la declaración FETCH antes de realizar cualquier operación. Para obtener más información, consulte @@FETCH_STATUS (Transact-SQL).
Permisos
De forma predeterminada, los permisos FETCH se otorgan a cualquier usuario válido.
Ejemplo
A. Uso de FETCH en un cursor simple
El siguiente ejemplo declara un cursor simple para filas en Person. Tabla de contactos cuyo apellido comience con la letra B y use FETCH NEXT para extraer estas filas una por una. La instrucción FETCH devuelve los valores de las columnas especificadas en DECLARE CURSOR como un conjunto de resultados de una sola fila.
Copiar código
Utilice AdventureWorks
para
declarar el cursor contact_cursor
para seleccionar el apellido de las personas. . Contacto
Donde el apellido es como "B%"
Ordenar por apellido
Abre el contact_cursor
-Realiza el primero extracción.
Obtener siguiente desde contact_cursor
: consulte @@FETCH_STATUS para ver si hay más filas para recuperar.
While @@FETCH_STATUS = 0
START
: esto se realizará siempre que la recuperación anterior haya sido exitosa.
Ir a continuación desde contact_cursor
Fin
Cerrar contact_cursor
Desasignar cursor de contacto
GOB. Utilice FETCH para almacenar el valor en una variable.
El siguiente ejemplo es similar al Ejemplo A, pero la salida de la instrucción FETCH se almacena en una variable local en lugar de devolverse directamente al cliente. La declaración PRINT combina las variables en una cadena y la devuelve al cliente.
Copiar código
Usando AdventureWorks
Go
- Declara una variable para almacenar el valor devuelto por FETCH.
Declare @LastName varchar(50), @FirstName varchar(50)
Declare el cursor contact_cursor
Seleccione el apellido y el nombre de la persona. Contacto
Donde el apellido es como "B%"
Ordenar por apellido, nombre
Abrir contact_cursor
-Ejecutar Primero busque y almacene el valor en una variable.
-Nota: El orden de las variables es el mismo que el orden de las columnas.
-En una sentencia SELECT.
Vaya a continuación desde contact_cursor
a @LastName,@FirstName
- Verifique @@FETCH_STATUS para ver si hay más filas para recuperar.
Mientras @@FETCH_STATUS = 0
Inicio
- Conecta y muestra el valor actual en la variable.
IMPRIMIR 'Nombre de contacto:'+@Nombre+' '+@Apellido
-Esta operación se realizará siempre y cuando la extracción anterior haya sido exitosa.
Ir a continuación desde contact_cursor
A @LastName, @FirstName
Fin
Cerrar contact_cursor
Anular asignación de contacto cursor
GOC. Declare el cursor de desplazamiento y use otras opciones de extracción.
El siguiente ejemplo crea un cursor de desplazamiento que admite todas las capacidades de desplazamiento a través de las opciones ÚLTIMO, ANTERIOR, RELATIVO y ABSOLUTO.