| 

.NET C# Java Javascript Exception

1
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.

Ist das normal? Kann man was dagegen tun?

Danke
News:
10.06.2011
Gast
13 3
1
vielleicht ist es hilfreich, wenn du hier das statement, die alte und die neue struktur angibst.
nabuchodonossor 10.06.2011
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

CLOSE listOfViews
DEALLOCATE listOfViews

Quelle: How do I create a stored procedure that calls sp_refreshview for each view in the database?
10.06.2011
Floyd 14,6k 3 9
Floyd 14,6k 3 9

Stelle deine Mssql-Frage jetzt!