Tecnología

Inicio

Cómo utilizar cursores anidados

Cómo utilizar cursores anidados


Los cursores son una estructura proporcionada en versiones programables de lenguaje de consulta estructurado (SQL) como Sybase o de Microsoft SQL Server Transact-SQL. Definir un cursor para un selecto o actualización de instrucción SQL en una o más tablas. El cursor tiene un nombre que se puede utilizar para referirse a, abrir y cerrar el cursor o recuperar filas del conjunto cursor. Los cursores se utilizan cuando cada fila del conjunto de las necesidades de procesamiento o de sus valores se utilizan en las variables del programa. Cuando un nuevo cursor se declara en el bucle que procesa cada fila de un cursor, el nuevo cursor interno está anidado dentro cursor externo de edad.

Instrucciones

1 Declarar un cursor para una instrucción de selección simple usando la siguiente sintaxis de T-SQL:

DECLARE <nombre-cursor cursor>

PARA SELECCIONAR campo1, campo2, field3

FROM &lt;table-name>

DONDE campo4 & lt; = @limitval

2 Abrir el cursor para procesar usando esta sintaxis de T-SQL:

ABIERTO <nombre-cursor>

3 Captar filas desde el cursor abierto para el procesamiento, ya que es un cursor de lectura (seleccionar). Declarar variables necesarios para almacenar los valores de los campos en la fila actual del cursor. La sintaxis de T-SQL para capturar las filas del cursor es el siguiente:

FETCH DESPUÉS de <nombre-cursor> EN @ var_fld1, var_fld2 @, @ var_fld3

mientras @@ FETCH_STATUS == 0

empezar

--- <Actual proceso fila del cursor aquí>

FETCH DESPUÉS de <nombre-cursor> EN @ var_fld1, var_fld2 @, @ var_fld3

fin

4 Añadir la declaración y ejecución de la segunda o interior cursor en el bucle se ha podido recuperar del cursor anterior o exterior de la siguiente manera:

- Cursor exterior traiga bucle

mientras @@ FETCH_STATUS == 0

empezar

&lt; process current row of outer cursor here >

- Es hora de declarar el cursor interno - comienza anidación

DECLARE CURSOR inner_cursor

PARA SELECCIONAR X, Y, Z, ....

DE tabla1, tabla2, ...

DONDE <condición>

inner_cursor ABIERTO

FETCH DESPUÉS de inner_cursor EN @varX, @varY, @varZ ...

mientras @@ FETCH_STATUS == 0

empezar - cursor interno se ha podido recuperar bucle

-- &lt;process current inner_cursor row here>

- Obtener la siguiente fila

FETCH DESPUÉS de inner_cursor EN @varX, @varY, @varZ ...

final - cursor interno se ha podido recuperar bucle

final - cursor exterior se ha podido recuperar bucle

Consejos y advertencias

  • Se recomienda aplicar los cursores anidados sólo cuando sea absolutamente necesario. Son SQL dinámico y costoso y exigente para el SQL Server procese. Evitar el uso de demasiadas tablas temporales o instrucciones de inserción durante el uso de cursores anidados. Utilice las funciones y procedimientos de las tiendas para pasar parámetros y compartir los datos cuando sea posible para eliminar la necesidad de cursores.