Cuando se modifica la estructura de una tabla, las vistas que la usan pueden quedar desfasadas (outdated) y no funcionar bien.
El problema es que se deben actualizar a mano mediante la ejecución de un procedimiento propio de la BD (es un problema porque hay que acordarse de ello):
sp_refreshview
(Updates the metadata for the specified non-schema-bound view. Persistent metadata for a view can become outdated because of changes to the underlying objects upon which the view depends.)
Ejemplo: execute sp_refreshview ‘vista_a_actualizar’
Para facilitar la actualiziación de todas las vistas de la BD, utilizar el siguiente procedimiento:
CREATE PROCEDURE [dbo].[admin_Refresh_All_Views] AS
— Refresca todas las vistas de la BD para asegurar que todas se actualizan cuando se
— producen cambios en la estructura de las tablas.
BEGIN
DECLARE @tblTmpViews TABLE (view_name varchar(100))
DECLARE @view_name nvarchar(100)INSERT @tblTmpViews
SELECT [name] FROM sysobjects WHERE xtype=’V’
DECLARE crsrViews CURSOR FOR
SELECT view_name FROM @tblTmpViews
OPEN crsrViews
— Check @@FETCH_STATUS to see if there are any more rows to fetch.
FETCH NEXT FROM crsrViews INTO @view_name
WHILE @@FETCH_STATUS = 0 BEGIN
— This is executed as long as the previous fetch succeeds.
EXEC sp_refreshview @view_name
FETCH NEXT FROM crsrViews INTO @view_name
END
CLOSE crsrViews
DEALLOCATE crsrViews
END
GO