mehrere FK auf dieselbe Spalte?

Das wäre auch mein Tip, wenn der einzige Unterschied das DELETE CASCADE ist, dann lass' es weg. Klappt es dann immer noch nicht, so muss der Fehler woanders liege...
 
Werd das morgen mal austesten, danke.
Nur damit wäre mein Problem nocht nicht gelöst, da ich die Foreign Keys kaskadierend benötige :confused:

naja, mal
vorerst danke und gute Nacht
 
Morgen

Also ich hab die Angelegenheit jetzt ohne kaskadierend löschen probiert. Damit lässt sich der 2. Constraint speichern.
Wie oben aber bereits erwähnt, löst das mein Problem nicht, da ich wenn dann beide mit der DELETE CASCADE Option benötige. Gibt's dafür vielleicht ne Möglichkeit?
 
Ich hab' das an meinem ersten Beispiel mal ausprobiert und ON DELETE CASCADE bei den hinzugefügt FKs hinzugefügt. Bei nur einem klappt es sobald ich es bei beiden FKs anfüge bekomme ich die Fehlermeldung:
Server: Msg 1785, Level 16, State 1, Line 1
Introducing FOREIGN KEY constraint 'FK_Personen_Adressen2' on table 'Personen' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.

Die klingt für mich ziemlich eindeutig und sagt, dass es nicht möglich ist auf ein und die selbe Referenz mehr als einen kaskadierenden Delete zu setzen.
Als workaround fällt mir nur ein Delete Trigger ein, mit dem Du das kaskadierende Löschen erzwingst.
Oder Du packst die Logik für kaskadierendes Löschen in einen anderen Layer Deiner Anwendung.
 
Und hier ist auch der passende Absatz aus den BOL:

"The series of cascading referential actions triggered by a single DELETE or UPDATE must form a tree containing no circular references. No table can appear more than once in the list of all cascading referential actions that result from the DELETE or UPDATE. The tree of cascading referential actions must not have more than one path to any given table. Any branch of the tree is terminated when it encounters a table for which NO ACTION has been specified or is the default."
 
andi_g69 hat gesagt.:
...
Oder Du packst die Logik für kaskadierendes Löschen in einen anderen Layer Deiner Anwendung.
Da soll die Logik ja raus, um die Angelegenheit zu optimieren. Aber wie es scheint muss der Teil halt drin bleiben.
Ok, danke dir
 
Ja, mal sehen. Das hab ich nicht zu entscheiden.
Werd das aber mal noch im Hinterkopf behalten, und mal vorschlagen.

thx und mfg
 

Neue Beiträge

Zurück