2011-10-13 29 views
31

Si yo JOIN o CROSS APPLY dos tablas y creo un VIEW, la vista se actualizará automáticamente cuando actualice cualquiera de las dos tablas o agregue registros a cualquiera de ellas?¿Las vistas se actualizan automáticamente

¿Aparecerán estos nuevos registros en el VIEW?

+6

Sí, lo harán - pero no es la forma más rápida de averiguar a probarlo? –

+0

No, la forma más rápida es google search :) –

Respuesta

34

Sí, se actualizan, cada vez que los utiliza.

creo que Microsoft resume lo que una vista es bastante clara:

Una vista puede ser pensado como una mesa, ya sea virtual o una consulta almacenada.

http://msdn.microsoft.com/en-us/library/aa214068%28v=sql.80%29.aspx

vistas no se almacenan en caché de forma automática.

Cuando SELECT desde un punto de vista, la base de datos ha de ejecutar la consulta almacenada en el fin de obtener el resultado conjunto para utilizar en su declaración

Los datos que 'ver' en una vista, no está realmente almacenada en cualquier lugar, y se genera a partir de las tablas sobre la marcha.

Debido a esto, tenga en cuenta la ejecución de vistas muy complejas. Siempre tenga en cuenta que la vista deberá ejecutarse antes de acceder a su conjunto de resultados.

+0

+1: O una macro que se expande en línea, formando parte del código adjunto, en lugar de un resultado precalculado. – MatBailie

+0

Si los datos de una vista no se almacenan en ningún lugar, cuando agrega una fila a una vista 'INSERT INTO dbo.MyView (myCol) VALUES ('test')' - ¿dónde está almacenado? – BornToCode

+1

No puede insertar registros en una vista – Curt

4

Sí, una vista es una consulta SELECT contra tablas/vistas subyacentes. Si modifica los datos en la (s) tabla (s) subyacente (s), y si ese rango se incluye en la definición de la vista, verá los datos modificados.

6

Una vista es básicamente una consulta almacenada, no contiene datos, por lo que no, no se actualizará cuando se construyan las tablas en las que se encuentra. Sin embargo, tan pronto como haga referencia a la vista, se ejecutará la consulta en la que se basa, por lo que verá los cambios realizados en las tablas base.

0

Simplemente agregando a @ Curt's Answer, si la actualización que realizó a las tablas subyacentes es agregar o eliminar datos, la vista se actualizará automáticamente con los datos nuevos. Si agrega o elimina las columnas de las tablas subyacentes (básicamente la definición de la Vista), entonces necesita ejecutar el procedimiento almacenado sp_RefreshView para reflejar el nuevo esquema en su vista.

0

Sí, los registros se actualizarán siempre.

Pero si modifica la definición de la tabla. No se olvide de ver refresh.

ejecutivo @viewname sp_refreshview

No utilice SELECT * en la definición de vista, en lugar de utilizar column name

Cuestiones relacionadas