2008-12-16 20 views
7

Tenemos una vista (llámala X) que es la vista base llamada por otras 2 vistas (llámalas Y y Z).SQL Server Vista que muestra datos obsoletos/incorrectos después de cambiar las dependencias subyacentes

Hoy hicimos un cambio para ver X, después de eso, la vista Y y Z comenzaron a traer datos que eran incorrectos. Cuando estábamos en Management Studio y ejecutamos Select * from Y (que es exactamente cómo se llama a la vista en el código), obtendría datos que eran incorrectos. Sin embargo, cuando ejecutamos el SQL real que la vista contenía estaba bien. Probamos varias cosas hasta que un colega sugirió agregar un espacio para ver X y Z y luego ejecutar Alter, que funcionó. Todo volvió a la normalidad y funcionó bien.

Mi pregunta es: ¿MSSQL almacena en caché sus vistas? y si es así, ¿cómo los fuerzan a NO obligarlos a volver a compilar?

Además, cualquier lectura adicional sobre esto sería útil.

Respuesta

9

Consulte el comando sp_refreshview.

Actualiza los metadatos de la vista no vinculada al esquema especificada. Los metadatos persistentes para una vista pueden quedar obsoletos debido a los cambios en los objetos subyacentes de los que depende la vista.

8

SQL Server no almacena en caché los datos de la vista (al menos, no de la forma en que se refiere).

Si una definición de vista contiene 'SELECT *', a continuación, la lista real de la columna se define cuando se crea la vista, es decir, el 'SELECT *' se sustituye por la lista de columnas real que exista en el momento de crear la vista. Esto significa que si agrega columnas a las tablas subyacentes a las que hace referencia esa vista, eso no aparecerá en la vista.

Cuestiones relacionadas