Announcement

Collapse
No announcement yet.

Löschen referenziereden Daten

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Löschen referenziereden Daten

    Hallo Leute,

    ich hab jetzt hier ein kleines Problem und ich hoffe, Ihr könnt mir helfen.

    Ich habe zwei Tabellen, die nachträglich mit FOREIGN KEY verknüpft werden sollen. Wenn ich jetzt aber aus der ersten Tabelle Daten löschen möchte und in der zweiten Tabelle noch verknüpfte Daten vorhanden sind, tritt natürlich ein Fehler auf.
    Das Problem ist, die Daten werden über ein Programm gelöscht, dessen Source-Code ich nicht ändern kann. Hier mal ein Beispiel

    Die Tabellen:
    CREATE TABLE Artikelliste(ID number primary key, Bezeichnung VARCHAR(250) ...

    CREATE TABLE Seriennummern(ID number primary key, Artikel BIGINT, Seriennummer VARCHAR(150) ...

    Die Verknüpfung
    ALTER TABLE Seriennummern ADD FOREIGN KEY (Artikel) REFERENCES Artikelliste(ID)

    Das hab ich von einem Entwickler des Programmes, das wir hier verwenden ... leider ist das nur eine inoffizielle Mitteilung ... der Code im Programm wird sicher nicht geändert.

    Das Löschen der Artikel würde dann so funkionieren:
    DELETE Artikelliste WHERE ID = xx
    DELETE Seriennummern WHERE Artikel = xx

    Das funktioniert aber nach dem Erstellen der Referenz nicht mehr. Der Datensatz aus der Tabelle Artikelliste kann nicht gelöscht werden, weil noch Datensätze in der Tabelle Seriennummern vorhanden sind.

    Die Referenz füge ich manuell hinzu um eine Replikation der Datenbank zu ermöglichen (ohne Referenz weiß ich ja nicht, welche Seriennummer zu welchem Artikel gehört ... außer ich mache die ganze Replikation manuell, aber da wäre der Aufwand zu groß).

    Gibt es eine Möglichkeit, eine Referenz zwischen den beiden Tabellen nachträglich zu erstellen, die die Daten in der Tabelle Seriennummern automatisch löscht, sobald ein Datensatz in der Tabelle Artikelliste gelöscht wird?

    Danke schon mal,

    Markus

  • #2
    Hallo Markus,

    ja, das geht indem Du den ForeignKey Constraint auf die Option "ON DELETE CASCADE" änderst; das sorgt dafür, das alle Daten, die auf die PrimaryKeys referenzieren mit gelöscht werden.
    Olaf Helper

    <Blog> <Xing>
    * cogito ergo sum * errare humanum est * quote erat demonstrandum *
    Wenn ich denke, ist das ein Fehler und das beweise ich täglich

    Comment


    • #3
      Hallo,

      das klingt genau nach dem was ich brauche
      Kannst Du mir vielleicht noch ein kleines Beispiel dazu geben?

      Danke, Markus

      Comment


      • #4
        Falls ich mich nicht vertan habe, sieht es so aus:
        [highlight=SQL]ALTER TABLE dbo.TabelleMitFK
        DROP CONSTRAINT ContraintTabelleMitFK
        GO
        ALTER TABLE dbo.TabelleMitFK ADD CONSTRAINT
        ContraintTabelleMitFK FOREIGN KEY
        (
        FKId
        ) REFERENCES dbo.PKTabelle
        (
        Id
        ) ON UPDATE NO ACTION
        ON DELETE CASCADE[/highlight]
        Olaf Helper

        <Blog> <Xing>
        * cogito ergo sum * errare humanum est * quote erat demonstrandum *
        Wenn ich denke, ist das ein Fehler und das beweise ich täglich

        Comment


        • #5
          Wunderbar ... das ist wirklich genau das was ich brauche.

          Besten Dank

          Comment

          Working...
          X