Abbruch von SchemaÄnderungsskript u.damit verbundene Problem

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Abbruch von SchemaÄnderungsskript u.damit verbundene Problem

    Hallo!
    Also mir stellt sich folgendes Problem:
    Wenn ich ein Skript "A" laufen lasse und es sich um eine Transaktion handelt, ist es kein Problem, wenn es zwischendurch abbricht, da Transaktionen ja rückgängig gemacht werden können.
    Was passiert aber bei einem Skript "B" in dem Datenbankschemaänderungen gemacht werden?
    Prinzipiell, kann man dann ja nicht einfach das Skript "B" von neuem Starten, sondern muss die schon gemachten Änderungen überspringen.

    Kann mir da jemand Hilfestellung leisten, in irgendeiner Art und Weise?

    Was mir bisher dazu einfiel ist, dass ich ja z.b. bei einem anlegen einer Tabelle vorher prüfen könnte ob sie schon existiert. Somit könnte ich dann diesen Befehl überspringen und den nächsten ausführen. Aber das hilft natürlich nur in manchen Fällen.
    Ich kann ja nicht alles Testen.
    Wenn ich beispielsweise Tabellen ändern möchte, kann ich ja nicht jedes einzelne Attribut und sonst was testen, ob alles durchgeführt wurde oder nicht!

    Es geht hier übrigens um MS SQL Server 2000+2005 Datenbanken.

    Bin für jede Hilfe dankbar!
    Michael
  • Ich kenne mich leider nicht mit MS SQL aus, nur mit MySQL.

    Wenn ich da das Statement zur Änderung des Datentyps einer Spalte zweimal ausführe passiert nichts. Das heißt es stellt kein Problem dar. Wie sieht es da bei MS SQL aus?

    Das Hinzufügen einer Tabelle kann ich durch die Prüfung ob diese Tabelle bereits existiert bedingen. Das stellt also ebenfalls kein Problem dar (aber auf diesen Gedanken warst du je bereits selbst gekommen).

    Was bleibt noch übrig?
    - Hinzufügen von Spalten (gibt es da bei MS SQL was ähnliches wie IF NOT EXIST?)
    - Hinzufügen von Indizes (s.o.)

    Ich weiß, daß ich dir eher neue Fragen gestellt habe statt Antworten zu geben, aber ich bin selber neugierig!
  • eine weitere Frage, was passiert, wenn ich eine neue tabelle erstellen möchte, er sie mir aber nur halb erstellt?

    Nehmen wir an ich würde folgendes erwarten:
    Tabelle Person (Personalnummer, Name, Vorname)

    Kann es passieren, dass er mittendrin abbricht und dann eine halbe Tabelle erzeugt und der Rest verschwindet?
    Tabelle Person(Personalnummer, Name)

    Weil dann würde das mit
    if not exist tabelle Person
    nicht klappen, weil sie ja schon existieren würde, aber halt nicht korrekt!
  • Einzelne Statements sind atomar, das heißt sie werden ganz oder garnicht ausgeführt. Wenn du die Tabelle mit einem Statement erstellst kann das nicht passieren. Solltest du die Tabelle aber mit nur einer Spalte erzeugen und mithilfe weiterer Anweisungen Spalten hinzufügen könnte das schon passieren. Aber dasselbe Problem wirst du haben wenn du eine "alte" Tabelle um eine Spalte ergänzt.
  • ok, aber das könnte ich doch dann ganz einfach durch Testen hinbekommen!
    also
    if (not exists "Spalte A") then create "Spalte A"

    also könnte man durch extrem defensives Programmieren (jedes statement überprüft vorher ob es schon getätigt wurde) das Problem beheben?

    >>Einzelne Statements sind atomar, das heißt sie werden ganz oder garnicht ausgeführt

    Das heißt ja dann, dass ich gar nicht so riesenprobleme hätte, wie ich dachte!
    Also wenn es einen Alterbefehl gibt über 100 Zeilen, dann wird entweder alles oder nichts ausgeführt?
  • "heimicha" schrieb:

    ok, aber das könnte ich doch dann ganz einfach durch Testen hinbekommen! also if (not exists "Spalte A") then create "Spalte A"

    Richtig, aber das ist unter MySQL (soweit ich weiß) leider nicht möglich. Bin neugierig, ob das unter MS SQL geht!

    "heimicha" schrieb:

    Also wenn es einen Alterbefehl gibt über 100 Zeilen, dann wird entweder alles oder nichts ausgeführt?

    Diese Variante steht unter MySQL ebenfalls nicht zur Verfügung und ich kann mir nicht vorstellen, daß es unter MS SQL geht. Aber das Verändern der Eigenschaften einer Spalte kann, wie gesagt, unter MySQL ohne Probleme zweimal ausgeführt werden.