Löschen eines Datensatzes aus einer Sicht und aus allen verknüpften Tabellen
Ich bin mit SQL server Management studio 2008.
Möchte ich löschen einen einzelnen Datensatz aus einer von einer Ansicht, die zeigt null-Werte in den Datensatz für alle Spalten.
Ich kann nicht wissen,aus welcher Tabelle bekomme ich diese null-Datensatz.
Überprüfte ich alle Tabellen, die verbunden werden für die anzeigen, aber keine der Tabellen enthält null-Datensatz.
Kann mir jemand helfen, diese zu löschen null-Datensatz aus meiner Sicht und aus allen verknüpften Tabellen..?
Weil ich mich mit dieser Ansicht in vielen anderen Seiten und erzeugt Fehler in jeder Seite mit dem Wert null.
wenn ich versuche zu löschen, aufnehmen von anzeigen, es zeigt Fehler wie
"Msg 4405, Level 16, State 1, Line 1
View or function 'viewGetProgressOverview' is not updatable because the modification affects multiple base tables."
Hmm, sql-server richtig ist, einen Blick ist "normal", readonly (Falls Ihr update ändert nur Daten aus einer Tabelle funktioniert es). Tut mir Leid, aber Sie haben zu zeigen, Ihre view-definition (und vielleicht die definition der zugrunde liegenden Tabellen)
löschen von viewGetProgressOverview wo subscriptionID ist null....Ich versuche, diese Abfrage ausführen..
nicht DML, Ihre DDL-Anweisung für eine Ansicht
mögliche problem bezieht sich auf die stackoverflow.com/questions/7281054/...
InformationsquelleAutor Hiral Bavisi | 2012-12-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Regeln für die Update-join-Ansichten sind wie folgt:
Referenz : -
Das einfügen in eine Sicht – INSTEAD-OF-TRIGGER – SQL-Server
Sql-aktualisierbare Ansicht mit verknüpften Tabellen
In diesem Fall verwenden Sie entweder die gespeicherte Prozedur oder der trigger. Für mehr, können Sie sich beziehen 1. link. Und wenn Sie immer noch irgendein problem haben, lassen Sie es mich wissen.
sagen Sie mir eine Sache, welche Art von join-Abfrage haben Sie für die Ansicht (ich meine äußere oder innere) ?
Ich habe verwendet, die outer-join..
InformationsquelleAutor Ravi
Können Sie nicht einfach verstecken Sie den Datensatz aus der Ansicht der Ergebnisse? E. g.
Ich weiß nicht, es wird mir helfen oder nicht aber kannst du mir genau sagen, wie das ausblenden einer einzelnen Zeile..sollte ich mal versuchen..
Wenn möglich, teilen Sie die Ansicht Abfragen mit uns, verschleiern es, wenn nötig. Und ich persönlich glaube, dass updateble Blick auf die Niederlage der Zweck von Ansichten (eine gute Diskussion auch hier: stackoverflow.com/questions/214132/what-are-views-good-for), Ansichten sind gut für mehr sicheren nur-Lesen-Zugriff auf die Daten.
InformationsquelleAutor AFD
Wenn die view-definition enthält eine äußere Verknüpfung, das dbms ist wahrscheinlich Herstellung diejenigen, die null-Werte. Wenn Ihre Sicht erfordert einen outer-join, es gibt nicht wirklich einen Weg, um die null-Werte. Wenn Sie halten Sie gut, sehen Sie Nullen. Wenn Sie Sie zu verstecken, dann bist du dem Sieg über den Zweck der outer-join.
Der einzige Weg, Sie zu entfernen, die konsistent mit einem erforderlichen outer join ist das löschen einer Zeile aus der erhaltenen Tisch. (Die Zeile, deren wesentliche Ursache für das dbms, die zur Herstellung der Nullen.)
Das einzige, was halten Sie von der Identifikation der lästige Zeile in der erhaltenen Tabelle ist, dass die Ansicht nicht enthalten, die in der Tabelle candidate keys. Fügen Sie ein Kandidaten-Schlüssel von jedem Tisch, ein zu einer Zeit, bis Sie die richtige zu finden. Sie brauchen nicht zu ändern, die view-definition zu tun, kopieren Sie einfach die anzeigen der SELECT-Anweisung eine SQL-Fenster.
Ihrer Ansicht fehlt, ist ein candidate key. Bearbeitet meine Antwort.
InformationsquelleAutor Mike Sherrill 'Cat Recall'
Den letzten Schritt, den ich nehmen muss ist zu neu das Loch Datenbank mit meinem letzten backup und erstellen Sie die Tabellen, die ich erstellt, nachdem das backup..
Jetzt ist auch mein problem gelöst.
Vielen Dank an alle für Eure Antworten und Hilfe..
InformationsquelleAutor Hiral Bavisi