none
Sicht duplizieren RRS feed

  • Allgemeine Diskussion

  • Hallo Zusammen,

    ich möchte gerne eine Sicht, so wie sie gerade ist, sichern, verändern und danach wieder so herstellen wie sie vor der Veränderung war.

    Der einfachste Weg der mir einfällt ist, die Sicht vorher unter einem neuen Namen (bspw. meineSicht_tmp) zu speichern. Geht das? Wenn ja wie?

    Oder gibt es bessere Methoden um die Sicht zu sichern? Kann ich bspw. den Code der Sicht auslesen und in eine Variable speichern? (Ich nutze Access und VBA)

    Vielen Dank und viele Grüße

    Patrick

    • Typ geändert Ionut DumaModerator Dienstag, 4. Februar 2014 15:36 Keine Rueckmeldung des Fragenstellender
    Mittwoch, 8. Januar 2014 07:54

Alle Antworten

  • Hallo Patrick,

    mir ist nicht ganz klar was Du möchtest. Wenn Du mit

    SELECT * FROM myview

    eine View aufrufst hast Du ein temporäres Ergebnis, Selbstverständlich kannst Du das Resultset speichern, verändern. Dies alles ohne das das SQL-Statement der View in irgend einer Weise hiervon beeinflusst wird.

    Ich will gar nicht fragen, warum man zur Laufzeit eine View ändern will/muss. Ich halte dies für bedenklich.

    Den Befehl zum Erstellen einer View kannst Du mit

    EXEC sp_helptext 'myview'

    abfragen.

    das funktioniert aber, meines Wissens, nur wenn die View nicht mit "WITH ENCRYPTION" erstellt wurde.

    Da Du mit dieser Abfrage den kompletten Befehl 'CREATE VIEW myview AS ............' erhälst bietet sich an, mit

    DROP myview

    die View in der derzeitigen Variante zu löschen und anschliessend den entsprechenden 'CREATE VIEW ..' zum anlegen der View dem SQL-Server zu übergeben.

    Gruss Uli



    Mittwoch, 8. Januar 2014 09:12
  • Was mir in Uli's Vorschlag fehlt, ist der Hinweis, das man den gescripteten Erstellungsbefehl ja leicht ändern kann, und aus dem "CREATE VIEW OriginalName..." ein "CREATE VIEW NeuerName..." machen kann

    im Management Studio kommt man da übrigens leicht mit Rechtslick auf die Sicht "Erzeuge Skript für "Create" heran (oder so ähnlich, hab hier kein deutsches SSMS, sorry)

    Und dann eben den Namen ändern und NICHT die alte Droppen


    Andreas Wolter
    Microsoft Certified Master SQL Server 2008
    Microsoft Certified Solutions Master SQL Data Platform, SQL Server 2012
    Blog: www.insidesql.org/blogs/andreaswolter
    Web: www.andreas-wolter.com | www.SarpedonQualityLab.com

    Mittwoch, 8. Januar 2014 10:06
  • Ich mache das ganze aus Access (eine adp) heraus. Programmiere also mit VBA. Ich kann das also nicht im Managementstudio durch klicken tun, sondern muss es in der Tat zur Laufzeit machen.

    Die Sache ist, dass eine komplexe Reportstruktur auf eine bestimmte View basiert. Um das Ergebnis der Reports zu verändern will ich kurzzeitig die Baisview einschränken. Danach, wenn mein bericht erstellt ist, will ich wieder die ursprüngliche View haben.

    Ich kenn aber zur Laufzeit leider nicht den Inhalt der ursprünglichen View. Daher müsste ich diesen erst auslesen und irgendwo sichern.

    Ein neuer Select auf die bestehende View geht auch nicht, weil der Name der ursprünglichen View vielfach in den Reports benutzt wird. ich kann also keine Sicht mit einem neuen Namen erstellen.

    Ich muss also irgendwie das Statement der ursprünglichen View auslesen und zwischenspeichern. Oder aber die View kurzzeitig unter einen neuen Namen duplizieren.

    Mittwoch, 8. Januar 2014 15:54
  • Ach das war der Haken, verstehe.

    Hm, architektonisch klingt das nicht ideal. Wenn Du auf Prozeduren setzen könntest, wäre das alles kein Akt. Aber ich schätz, das ist nun zu spät.

    Was genau musst Du denn ändern?

    Eine WHERE-Bedingung?

    Spalten austauschen? Namen ändern? Spalten hinzufügen&ändern? - Ich hoffe das alles nicht.

    Wenn es "nur" eine Filteranweisung ist, sollte Uli's Vorschlag mit dem Ausscripten der Definition funktionieren, ohne das irgendetwas dann ins leere verweist.

    Ansonsten kann man solche Filter ja meist auch in Berichten selber integrieren (ohne die Basis-Objekte zu editieren) - aber da kenne ich mich in Access nicht mehr aus.


    Andreas Wolter
    Microsoft Certified Master SQL Server 2008
    Microsoft Certified Solutions Master SQL Data Platform, SQL Server 2012
    Blog: www.insidesql.org/blogs/andreaswolter
    Web: www.andreas-wolter.com | www.SarpedonQualityLab.com

    Mittwoch, 8. Januar 2014 16:09
  • Ja genau.. leider zu spät. Wenn ich das auf der grünen Wiese tun könnte, würde ich das natürlich anders machen.

    Ich muss nur die WHERE Bedingung ändern.

    Das mit dem ausscripten klappt tatsächlich. Also ich sehe im Management Studio das ganze Statement der View. Nur ist mein SQL Wissen zu dünn um zu wissen wie ich dieses Ergebnis in meine CREATE VIEW Anweisung integrieren kann.

    Habt Ihr bitte noch einen Tipp für mich?

    Mittwoch, 8. Januar 2014 16:42
  • Schau doch mal, was hier passiert:

    USE tempdb
    GO
    create view v1
    as
    select name from sys.objects
    go

    exec sp_helptext 'v1'
    GO

    -- ändern
    ALTER view v1
    as
    select name from sys.objects
    where name = 'v1'
    go

    -- aufräumen
    drop v1

    Damit wird eine Sicht "v1" angelegt

    Danach kommt die Anzeige des Scriptes

    und am Ende wird sie wieder gelöscht - das gehört aber nicht zur Demo sondern ist nur Aufräumarbeit

    Entscheidend ist der Script, der Dir unten im Ergebnis angezeit wird. Diesen kannst Du sicher mit VBA einlesen und manipulieren.

    Du würdest also in dem Text die Stelle suchen, wo die WHERE-Bedingung hingehört, und die Sicht temporär mit Deiner Version ersetzen, indem Du die bestehende mit ALTER änderst. - Beispiel siehst Du da.

    -Möglichst nicht einfach löschen und Neu anlegen - damit würdet ihr alle Berechtigungen, die ev. direkt auf der Sicht liegen, verlieren, und auch mit Repliakation würde sich das nicht vertragen.

    Du würdest dann das ganze wieder umdrehen, die alte Version wieder "hervorholen" und mit ALTER "zurücküberschreiben".

    Ich hoffe das ist verständlich ausgedrückt.


    Andreas Wolter
    Microsoft Certified Master SQL Server 2008
    Microsoft Certified Solutions Master SQL Data Platform, SQL Server 2012
    Blog: www.insidesql.org/blogs/andreaswolter
    Web: www.andreas-wolter.com | www.SarpedonQualityLab.com

    Mittwoch, 8. Januar 2014 16:51
  • **************************************************************************************************
    Dieser Thread wurde mangels weiterer Beteiligung des Fragestellenden ohne bestätigte Lösung abgeschlossen.
    Neue Rückfragen oder Ergänzungen zu diesem Thread bleiben weiterhin möglich.
    **************************************************************************************************

    Ionut Duma, MICROSOFT   Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-PrinzipEntwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Dienstag, 4. Februar 2014 15:35
    Moderator