miércoles, 15 de julio de 2015

Receta T-SQL No. 2-10: Creación y Uso de Cursores

Índice

0. Introducción
1. Problema
2. Solución
3. Discusión de la Solución
4. Práctica: Código C#
5. Conclusiones
6. Glosario
7. Literatura & Enlaces

0. Introducción

Última receta T-SQL de esta serie de recetas dedicadas a comprender las construcciones programáticas disponibles en el lenguaje T-SQL: declaración de variables, asignación de variables, uso de sentencias de control de flujo, sentencias iterativas. El objetivo principal de esta receta es entender cómo podemos usar un cursor para el tratamiento individual de los registros (filas) retornados por una sentencia T-SQL. Se presentarán algunas advertencias de rendimiento a la hora de usar este enfoque de manipulación de registros.

1. Problema

Necesitamos conocer cómo lograr el procesamiento de registro-por-registro en lugar de recurrir a operaciones masivas (o basadas en conjunto) sobre registros o filas.

2. Solución

En T-SQL podemos usar cursores para el tratamiento de registro-por-registro para lograr un control más riguroso sobre lo que se ha de hacer sobre cada registro.

3. Discusión de la Solución

Lo primero que debemos considerar antes de entrar en materia es la siguiente precaución con el uso de cursores [1]:
Advertencia uso de cursores
Figura 1. Advertencia uso de cursores [1].
Algunas de las situaciones donde se podría recurrir al uso de cursores son las que se mencionan en [1]:
  • Obtención de información de administración de una base de datos.
  • Solución de problemas que en el modo de operación basado en conjunto no son posibles de solucionar.
Para la creación de cursores deberíamos seguir estos pasos:
  1. Declaración de una variable CURSOR
  2. Apertura del cursor
  3. Recuperación de registros (filas) uno a la vez
  4. Ciclar registro-por-registro
  5. Cierre del cursor
  6. Liberación de recursos del cursor
En el ejemplo que escribiremos en la sección práctica seguiremos estos pasos para iterar por cada registro (tienda) en la tabla Store de la base de datos AdventureWorks2012.

4. Práctica: Código C#

El punto 4 (líneas 24-28) es donde ocurre la parte más interesante del procesamiento de registro-por-regitro (row-by-row) aquí tratamos de forma individual cada registro de la tabla Store de la base de datos AdventureWorks2012. El procesamiento que hacemos aquí por cada fila consiste en mostrar el ID de la tienda y su nombre; en la Figura 2 se muestra el resultado de la ejecución de este código T-SQL.
Salida ejecución cursor

5. Conclusiones

Aprendimos a crear un cursor para la exploración de registro por registro de un conjunto de registros. Este tipo de operación, como se adivirtió arriba, puede reducir el rendimiento de la aplicación, reducir la concurrencia, disminuir el ancho de banda, bloquear el acceso a recursos, entre otros; es por eso que se debe usar en situaciones muy especiales y prestando particular atención con no afectar el desempeño de la aplicación.


Con la próxima receta damos inicio a la tercera serie de recetas T-SQL: NULLs y sus trampas.

6. Glosario

  • Cursor
  • Rendimiento
  • Sentencia
  • T-SQL

7. Literatura & Enlaces

[1]: SQL Server 2012 T-SQL Recipes - A Problem-Solucion Approach by Jason Brimhall, David Dye, Jonathan Gennick, Andy Roberts, and Wayne Sheffield. Copyright 2012 Jason Brimhall, David Dye, Jonathan Gennick, Andy Roberts, and Wayne Sheffield, 978-1-4302-4200-0.

S

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.