sábado, 29 de enero de 2011

Un error con vistas SQL

En el proyecto en el que estoy actualmente, estamos en la fase de garantía y evolutivo. Es decir, ya tenemos la aplicación en producción y ahora estamos corrigiendo los fallos encontrados, que a causa de haber echo pocos test han sido demasiados, y evolucionando según los nuevos requisitos y nuevas funcionalidades que nos pide el cliente.

Ayer, puse en producción una nueva actualización y me llevé una negativa sorpresa al saltar las alarmas en varios informes y en una página que daba un error que ni en el servidor de desarrollo, ni en el de preproducción, ni en uno de producción (son varios servidores implicados en el proyecto), se podía reproducir. Y que nos indicaba que no podía encontrar dos columnas en la tabla solicitada!!

Desesperado ante la inminente avalancha de llamadas por el bloqueo, nos revisamos el código y no localizábamos el error hasta que nos dimos cuenta que se producía en la carga de un grid por medio de un SqlDataAdapter que utilizaba un SQL que realizaba el FROM de una vista que hacia la unión entre dos tablas.

Aunque en ese momento me relaje un poquitito, ya que el problema no era de mi equipo por lo cual tampoco era nuestra responsabilidad directa, me senté igualmente con el administrador de base de datos del cliente a revisar qué le podía pasar a la vista.

La cosa se volvió extraña cuando vimos que la vista existía y era algo tal que así:

SELECT * FROM tablaA
UNION
SELECT * FROM tablaB

Revisando el historial nos dimos cuenta que habíamos modificado las tablas para añadir dos campos, justamente los que faltaban, hacia ya unas semanas. Pero mirando la vista, parecía que todo estaba correcto… pero no es así. Lanzando la vista en uno de los servidores donde fallaba nos encontramos que no incluía las columnas nuevas y las columnas de replicación (es un sistema de bases de datos sincronizadas).

A lo cual, hallamos por fin la solución al problema: BORRAS la vista –no vale con modificarla- y la vuelves a crear. Y, voala!!, todo funcionando como un tiro.

No lo he buscado en MSDN , pero supongo que SQL compila y cachea las vistas y puede, en este caso tan especial, dar este tipo de problemas.

2 comentarios:

Blog "SOLO FUTGOL" dijo...
Este comentario ha sido eliminado por el autor.
Blog "SOLO FUTGOL" dijo...

Es correcto este error nos sucedió en el trabajo, seguramente de alguna manera cachea la vista para hacer la consulta un poquito más eficiente. Fue un dolor, al final hicimos la misma jugada (borrar la tabla).