*Dejaré un link de descarga hasta abajo con todos los querys que usé por si quieren practicar
Introducción
Soy pragramador c# y he trabajado mucho tiempo con SQL tanto de manera laboral como cuando fui estudiante.
Me tope con muchas cosas que no sabía como resolver entre ellas el recorrer una tabla en sql.
Investigndo dí con los cursores y realmente me fatigaron un poco, ya que la estructura no se parecía a lo que he manejado.
Sin embargo sé usar los ciclos muy bien, así que aquí te enseñaré como recorrer una tabla de sql usando el ciclo while.
Para este ejemplo creé una base de datos llamada Tutoriales y en ella agregué una tabla llamada ReccorrerLista con los siguientes datos como columnas:
Una vez creemos la tabla vamos a ponerle registros, para el ejercicio que usaré de ejemplos necesito poner datos con valores repetidos:
Ejercicio
Intentemos eliminar los registros que esten repetidos recorriendo la tabla y comparando datos.
Paso 1
*Si no sabes acerca de tablas temporales, por ahora solo hay que saber que cuando creas una, se elimina en automático cuando se terminan las instrucciones que ejecutas
Crearemos una tabla temporal la cual llamaremos tablaTemporal que tenga los mismos valores (o al menos los que usaremos para comparar) que nuestra tabla real , sin olvidar el Id de la tabla original, en este caso lo llamaremos Id_RecorrerLista ya que ahí le especificaremos el Id de nuestra tabla real, tambien le pondremos identity autoincrementable, luego le insertamos los registros de nuestra tabla real:
Como vemos, es posible insertar todos los valores a la tabla temporal unicamente haciendo select y especificando los datos que insertaremos, en este caso omitimos el Id, porque es autoincrementable.
Para este ejemplo es muy importante que pongamos el order by, para que de este modo se inserten los registros de manera ordenada, ya que nuestra tabla real tiene repetidos pero no están en orden.
Podríamos hacerle un select a la tabla temporal para confirmar que los datos se guardaron acomodados:
Hagamos ahora un select a la tabla original para comprobar que no estaban en orden:
Paso 2
Una vez comprobado que nuestros registros estén ordenados, pasamos a crear el ciclo con el cuál recorreremos nuestra tabla, en este caso utilizaremos el ciclo while.
Si tenemos conocimiento en programación entenderemos que el ciclo while requiere de una condición, mientras esa condición se cumpla, seguira su ciclo.
Para nuestro ejercicio, nuestra condición será que mientras haya registros en la tabla temporal siga recorriendo la tabla.
Estructura y sintaxis de nuestro ciclo:
Para realizar la condición, hice un select top 1 1, de la tabla temporal, esto lo que hace es seleccionar el número 1, siempre y cuando exista al menos 1 registro en la tabla.
Vemos que se pone en rojo la palabra reservada 'end', esto es porque no tenemos nada dentro de nuestro ciclo, por lo tanto no se ejecutaría nuestra consulta, es necesario poner una instrucción dentro del ciclo para que no detecte el error.
Paso 3
Ya tenemos nuestra condición en nuestra estructura while, lo que ahora sigue es eliminar registros de la tabla temporal en cada ciclo, ya que si no hacemos esto, pues nuestro ciclo se haría infinito, ya que nunca se rompe la condición de que exista al menos un registro en la tabla temporal.
Para esto lo que haremos es guardr el identity del primer registo que encontremos en una variable y luego eliminar ese registro utilizando como referencia este Id que acabamos de obtener.
Estructura y sintaxis:
Con esto ya tenemos hecho nuestro ciclo, funcional, es cosa de poner nuestra lógica dentro de él.
Paso 4
Para terminar con el ejercicio, recordemos que es eliminar registros duplicados, haremos lo siguiente:
1. Crear variables donde guardaremos los valores de las columnas, esto antes de entrar al ciclo:
2. Guardar los valores del registro seleccionado en nuestras variables (esto ya es dentro del ciclo)
3. Ya que tenemos los datos guardados compararemos con el registro anterior, usando la sentecia if, para comparar los valores, esto se ahce antes de asignarles el valor a las variables, de esta forma siempre compararemos el anterior con el nuevo.
A modo de prueba puse un print (
print 'es igual') para saber que es igual,
4. Una vez que ya sabemos identificar que el registro anterior es igual al actual, lo eliminamos de la tabla original, en es te caso hacemos un delete pero usando como referencia el Id_RecorrerLista, para que solo quede 1.
5. Ejecutamos y hacemos un select a la tabla Real, ReccorrerLista, para comprobrar que se eliminaron los duplicados.
Listo, terminamos el ejercicio, podemos ver que solo queda 1 registro de cada 1, está claro que hay maneras más eficientes de realizar esta tarea, pero esto nos ayuda a entender la estructura y practicar.
Link de descarga de los querys utilizados:
No hay comentarios:
Publicar un comentario