Announcement

Collapse
No announcement yet.

1:n Beziehung und ON UPDATE CASCADE

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

  • 1:n Beziehung und ON UPDATE CASCADE

    Hallo SQL-Profis,

    ich benutze MS SQL-Server 2000 (SP 2) und habe in einer Datenbank zwei Tabellen, die ich mittels Beziehungen miteinander verknüpfen möchte.

    Die eine Tabelle enthält die Mitarbeiterdaten der Firma. Der Primärindex dieser Tabelle heißt "PersID".

    In einer zweiten Tabelle, die Verträge enthält, gibt es zwei Felder, jeweils mit der Personal-ID aus der ersten Tabelle, nämlich die Felder "VertreterID" und "SachbearbeiterID".

    Durch eine referentielle Integrität will ich nun sicherstellen, dass die in der Vertragstabelle gespeicherten Personal-ID's im Falle einer Änderung der PersID in der Mitarbeitertabelle automatisch angepasst werden.

    Wie muss ich das anstellen?
    Der Enterprise Manager des SQL-Servers 2000 verweigert mir dies mit der sinngemäßen Meldung, dass hierdurch "Schleifen oder kaskadierende Pfade" verursacht werden können.

    Für einen richtungsweisenden Tip bin ich jedem äußert dankbar.

    Gruß

    Reinhod

  • #2
    Hallo,

    das folgende Beispiel demonstriert die Wirksamkeit von ON UPDATE CASCADE. Wird der Wert der Spalte <i>PERSNR</i> in der übergeordneten Tabelle geändert (UPDATE ANG SET PERSNR = 9 WHERE PERSNR = 1), so aktualisiert der MS SQL Server auch den Wert der Spalte <i>PERSNR</i> in der abhängigen Tabelle:

    <pre>

    USE tempdb
    GO

    CREATE TABLE ANG (
    PERSNR INTEGER NOT NULL,
    NAME VARCHAR(20),
    PRIMARY KEY (PERSNR))
    GO

    CREATE TABLE PROJEKT (
    PRONR INTEGER NOT NULL,
    PERSNR INTEGER NOT NULL,
    PRONAME VARCHAR(20),
    PRIMARY KEY (PRONR),
    FOREIGN KEY (PERSNR) REFERENCES ANG (PERSNR) ON UPDATE CASCADE ON DELETE CASCADE)
    GO

    INSERT INTO ANG (PERSNR, NAME) VALUES (1, 'Andreas')
    INSERT INTO ANG (PERSNR, NAME) VALUES (2, 'Wilhelm')
    INSERT INTO PROJEKT (PRONR, PERSNR, PRONAME) VALUES (1, 1, 'Projekt 1')
    INSERT INTO PROJEKT (PRONR, PERSNR, PRONAME) VALUES (2, 2, 'Projekt 2')
    INSERT INTO PROJEKT (PRONR, PERSNR, PRONAME) VALUES (3, 1, 'Projekt 2')
    GO
    SELECT * FROM ANG
    SELECT * FROM PROJEKT
    -- Primärschlüsselwert ändern
    UPDATE ANG SET PERSNR = 9 WHERE PERSNR = 1
    -- Zur Kontrolle neu anzeigen
    SELECT * FROM ANG
    SELECT * FROM PROJEKT

    </pre&gt

    Comment

    Working...
    X