Hallo,
wir setzen den SQLSERVER 2008 ein.
Problem: Wir mussten unser Datenmodell ändern (Spalte in einer Tabelle wurde von 250 auf varchar(4000) geändert).
Anschließend wurde über die Views ein sp_refreshview gemacht, um die Metadaten zu aktualisieren. Da die Dependencies zu dieser Tabelle häftig sind, haben wir eine kleine Prozedur geschrieben.
Die funkt auch. Problem, es werden bei einem View mal 6 Spalten abgeschnitten.
Also Rücksicherung Datenbank und sp_refreshview nur auf diesen View angewendet. -> Geht fein und die Spalten sind noch da!
Stellt sich die Frage, warum beim Durchlauf der Prozedur sp_refreshview anders tickt.
Hat hier jemand eine Antwort? Vielen Dank...
wir setzen den SQLSERVER 2008 ein.
Problem: Wir mussten unser Datenmodell ändern (Spalte in einer Tabelle wurde von 250 auf varchar(4000) geändert).
Anschließend wurde über die Views ein sp_refreshview gemacht, um die Metadaten zu aktualisieren. Da die Dependencies zu dieser Tabelle häftig sind, haben wir eine kleine Prozedur geschrieben.
Code:
alter procedure [dbo].[refresh_all_views] as begin DECLARE @view AS VARCHAR(255); DECLARE views_cursor CURSOR FOR SELECT TABLE_SCHEMA + '.' +TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'VIEW' AND OBJECTPROPERTY(OBJECT_ID(TABLE_NAME), 'IsMsShipped') = 0 ORDER BY TABLE_SCHEMA,TABLE_NAME OPEN views_cursor FETCH NEXT FROM views_cursor INTO @view WHILE (@@FETCH_STATUS <> -1) BEGIN BEGIN TRY begin transaction EXECute sp_refreshview @view; PRINT @view; commit transaction END TRY BEGIN CATCH PRINT 'Error during refreshing view "' + @view + '".'; Print error_message () rollback transaction END CATCH; FETCH NEXT FROM views_cursor INTO @view END CLOSE views_cursor; DEALLOCATE views_cursor; end
Also Rücksicherung Datenbank und sp_refreshview nur auf diesen View angewendet. -> Geht fein und die Spalten sind noch da!
Stellt sich die Frage, warum beim Durchlauf der Prozedur sp_refreshview anders tickt.
Hat hier jemand eine Antwort? Vielen Dank...
Comment