Inhalt von Foreign Key Spalten ändern
WernerK
- sql
Hallo,
in einer SQL Server DB gibt es 3 Tabellen die bei einer Spalte (COMPANY_ID) eine Foreign Key Beziehung haben. Momentan steht in allen Tabellen der Wert "XYZ" drin. Wenn ich diese Spalte nun in einer Tabelle ändern möchtw auf z.b. "123", dann kommt eine Fehlermeldung wegen Foreign Key Beschränkung.
Wie kann man denn nachträglich diese Werte ändern? Müsste man die Tabellen erst leeren?
Gruss
Werner
Tach!
Wenn ich diese Spalte nun in einer Tabelle ändern möchtw auf z.b. "123", dann kommt eine Fehlermeldung wegen Foreign Key Beschränkung. Wie kann man denn nachträglich diese Werte ändern?
So, dass die referenzielle Integrität gewahrt bleibt. Du kannst in der abhängigne Tabelle nur Werte eintragen, die es auch in der anderen Tabelle gibt. Beides gleichzeitig ändern geht da also nicht. Du brauchst ja zwei Updates in in dem Momant dazwischen ist die Integrität verletzt.
Müsste man die Tabellen erst leeren?
Je nach Konfiguration kann man auch NULL eintragen, dann den Master ändern und anschließend den NULL-Wert anpassen.
Der SQL Server kennt aber auch die Möglichkeit, die Integritätsprüfung (vorübergehend) auszuschalten, dann gehts ohne Umstände. Suchstichwörter: "sql server turn off integrity checking"
dedlfix.
Hallo WernerK,
neben den von dedlfix genannten Möglichkeiten gibt es auch Optionen, die Du an der Beziehung selbst setzen kannst und die für diese Beziehung ständig gelten.
Du kannst den Foreign Key so definieren, dass der Server ihn generell nicht erzwingen soll (Enforce Foreign Key Constraint). Warum sollte man das tun? Entweder weil man gerne dokumentiert, oder wegen Punkt 2…
Du kannst den Foreign Key so definieren, dass Änderungen in der Primary-Table sich auf die abhängigen Tabellen auswirken. Es gibt 4 Möglichkeiten, jeweils für DELETE und UPDATE in der Primary Table
Was Du davon brauchen kannst, hängt von Deiner Anwendung ab und deiner Lust auf Footguns. Ein Cascade Delete kann üble Folgen haben, wenn man an seine Existenz nicht denkt und vielleicht auch eine Kette von Referenzen hat.
Rolf