Frage

Sehr große Datenbank in MSSQL2005 mit großer Code-Basis auf der Struktur dieser Datenbank abhängig.

Ich habe etwa 10 ähnliche Tabellen sie alle entweder den Dateinamen oder den vollständigen Pfad der Datei enthalten. Der vollständige Pfad ist immer abhängig von der Position-ID, so dass es nicht sinnvoll, es in der Datenbank zu speichern macht. Brauchbare Daten aus diesen Tabellen geht ein wenig wie folgt aus:

SELECT a.item_id
, a.filename
FROM (
    SELECT id_item AS item_id
    , path AS filename
    FROM xMedia

    UNION ALL

    -- media_path has a different collation
    SELECT item_id AS item_id
    , (media_path COLLATE SQL_Latin1_General_CP1_CI_AS) AS filename
    FROM yMedia

    UNION ALL

    -- fullPath contains more than just the filename
    SELECT itemId AS item_id
    , RIGHT(fullPath, CHARINDEX('/', REVERSE(fullPath))-1) AS filename
    FROM zMedia

    -- real database has over 10 of these tables
) a

Ich mag eine einheitliche Sicht auf all diesen Tabellen erstellen, so dass neuer Code, um diese Daten-Katastrophe mit nicht über all die verschiedenen Medientische wissen müssen. Ich möchte auch diese Ansicht verwenden für Einsatz und Update-Anweisungen. Offensichtlich alter Code würde immer noch auf den Tischen verläßt auf dem neuesten Stand zu sein.

Nach der Msdn Seite Lese über Ansichten in MSSQL2005 Schaffung ich glaube nicht, eine Ansicht mit SCHEMA genug sein würde.

Wie würde ich so eine aktualisierbare Ansicht erstellen?

Ist dies der richtige Weg zu gehen?

War es hilfreich?

Lösung

Sie können die partitionierten Ansichten ändern, sofern sie bestimmte Bedingungen erfüllen.

Diese Bedingungen umfassen auf jedem Tisch eine partitioning column als Teil des Primärschlüssels aufweist, und einen Satz an nicht überlappenden Kontrollbedingungen für die Partitionierungsspalte aufweist.

Dies scheint nicht Ihr Fall zu sein.

In Ihrem Fall können Sie eine der folgenden tun:

  • Erstellen Sie Tabellen Ansichten (mit berechneten Spalten) für Ihre Legacy-weich zu arbeiten, und aus dem neuen weichen
  • auf die gesamte Tabelle beziehen
  • Verwenden Sie INSTEAD OF löst die Tabellen zu aktualisieren.

Andere Tipps

Blättern Sie nach unten auf der Seite, die Sie verbunden und Sie werden einen Absatz über aktualisierbare Ansichten sehen. Sie können einen Blick auf Basis von Gewerkschaften unter anderem Einschränkungen aktualisieren. Die Logik dahinter ist wohl einfach, wie sollten SQL Server entscheiden, welche Quelltabelle / Ansicht sollte das Update erhalten / einfügen?

Wenn eine Ansicht auf mehreren Basistabellen basiert, UPDATE-Anweisung auf der Ansicht kann oder möglicherweise nicht in Abhängigkeit von der Update-Anweisung. Wenn die UPDATE-Anweisung mehrere Basistabellen betrifft, wirft SQL Server einen Fehler. Wenn dagegen die UPDATE in der Ansicht nur eine Basistabelle wirkt dann wird die UPDATE arbeiten (nicht immer korrekt). Der Einsatz und delete-Anweisungen werden immer fehlschlagen.

STATT Trigger verwendet werden, um richtig UPDATE, INSERT und DELETE aus einer Sicht, die auf mehreren Basistabellen basiert. Die folgenden Links Beispiele zusammen mit einem Video-Tutorial auf demselben hat.

STATT INSERT-Trigger
STATT UPDATE-Trigger
STATT-Trigger DELETE

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top