Announcement

Collapse
No announcement yet.

Foreign key auf selbe Tabelle: on delete set null geht nicht

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

  • Foreign key auf selbe Tabelle: on delete set null geht nicht

    Hallo,
    bei folgenden Anweisungen:

    create table T (T1 int not null primary key, T2 int)
    go
    alter table T add constraint FK_T_T foreign key (T2) references T on delete set null
    go


    kommt es beim Erstellen des Constraints zu folgender Meldung:

    Das Einführen der FOREIGN KEY-Einschränkung 'FK_T_T' für die 'T'-Tabelle kann Schleifen oder mehrere Kaskadepfade verursachen. Geben Sie ON DELETE NO ACTION oder ON UPDATE NO ACTION an, oder ändern Sie andere FOREIGN KEY-Einschränkungen.

    Das Problem ist wohl die Option "on delete set null", bei "no action" ist es kein Problem. Ist es richtig, dass der SQL Server 2005 dies nicht unterstützt? Kann jemand Code für einen Trigger vorschlagen, der diese Aufgabe übernimmt?

    Danke.
    Karlo

  • #2
    hi,

    kaskadierende einschränkungen der referenziellen integrität gehen nur über mehere tabellen, so a la:

    Code:
    CREATE TABLE auftrag
    (auftrag_nr	INT NOT NULL PRIMARY KEY, kunden_nr	INT)
    
    CREATE TABLE auftragpos
    (auftragpos_nr	INT PRIMARY KEY, auftrag_nr INT, artikel_nr INT)
    	
    ALTER TABLE auftragpos ADD CONSTRAINT FK_A_A FOREIGN KEY (auftrag_nr) REFERENCES auftrag 
    		ON DELETE SET NULL
    ... obwohl das constraint-beispiel ziemlich schwachsinnig ist.

    Code:
    CREATE TABLE auftrag
    (auftrag_nr	INT NOT NULL PRIMARY KEY, kunden_nr	INT)
    
    CREATE TABLE auftragpos
    (auftragpos_nr	INT, auftrag_nr INT, artikel_nr INT,
    PRIMARY KEY (auftragpos_nr, auftrag_nr))
    	
    ALTER TABLE auftragpos ADD CONSTRAINT FK_A_A FOREIGN KEY (auftrag_nr) REFERENCES auftrag 
    		ON DELETE CASCADE
    so ist's besser.

    CU
    Torsten Schüßler InsideSQL.de

    Comment


    • #3
      Hallo,

      ..kann Schleifen oder mehrere Kaskadepfade verursachen..
      dieses potentielle Problem sowie Alternativen dazu werden in dem Papier
      http://msdn2.microsoft.com/en-us/lib...4(SQL.80).aspx näher beschrieben.

      Comment

      Working...
      X