Hallo, ich habe in meiner MSSQL-DB einen View der auf Tabelle A und in einem Subqery auf Tabelle B Zeigt. Seit dem ich eine Strukturänderung an Tabella A vorgenommen habe, nämlich ein logisches Feld angehängt, liefert mir der View in dem per Subqery selektierten Feld fälschlicherweise einen logischen Wert zurück. Wenn ich den View mit z.B. Alter View einfach nochmal erstelle, ohne irgendwelche Änderungen daran vorzunehmen, funktioniert er wieder.
kann leider aufgrund eines Bugs hier im forum den beitrag nicht editieren, der View und die Struktur passen nicht in das Kommentarfeld :-(
– Gast 10.06.2011
1 Antwort
1
Das von dir beschriebene Verhalten ist bekannt und lässt sich durch folgenden Aufruf der System-Prozedur "sp_refreshview" beheben:
exec sp_refreshview [viewName]
Das Verhalten begründet sich dadurch das die Metadaten der View für die zugrundeliegenden Objekte nicht mehr aktuell sind und somit neu erstellt werden müssen.
Nachtrag:
Wenn du folgenden Code in eine Prozedure schreibst, kannst du automatisch für alle deine Views "sp_refreshview" aufrufen lassen:
DECLARE @viewName AS VARCHAR(255)
DECLARE listOfViews CURSOR FOR SELECT '[' + SCHEMA_NAME(uid) + '].[' + name + ']' FROM sysobjects WHERE xtype = 'V'
OPEN listOfViews FETCH NEXT FROM listOfViews INTO @viewName WHILE ( @@FETCH_STATUS <> -1 ) BEGIN
FETCH NEXT FROM listOfViews INTO @viewName
BEGIN TRY EXEC sp_refreshview @viewName PRINT @viewName + ' refreshed OK' END TRY BEGIN CATCH PRINT @viewName + ' refresh failed' END CATCH END