Die Konstellation sieht genau genommen so aus:
t1 (i1, f1, f2, …),
t2 (i1, f1, f2, …),
t3 (i1, f1, f2, …)
Also i1 ist immer Primärschlüssel und im Falle von t2 und t3 gleichzeitig Fremdschlüssel auf t1.i1. Und natürlich existiert t1.i1 schon vor dem Bau von t2 und t3, denn diese Tabelle existiert eh schon. Es wird nur ein neuer Typ „t3“ eingeführt und die Einträge sind entweder vom Typ t2 oder vom Typ t3, es gibt aber eine Anzahl von Feldern, die bei beiden Typen äquivalent sind. Diese Felder werden in t1 stehen, der Rest wird auf t2 oder t3 verteilt. Der Schlüssel i1 wird in allen Tabellen jeweils eindeutig sein. Die Spalten f1 bis fn, die dann in t2 sind, werden ganz zum Schluss aus t1 gelöscht.
Ich kann ganz prima alles so anlegen wie ich will, wenn die Tabellen leer sind. Aber ich kann nicht nachträglich neue Tabellen anlegen und dort einen Fremdschlüssel auf eine IDENTITY-Spalte einer bereits existenten, gefüllten Tabelle definieren.
Die einzige Möglichkeit, die ich bisher gefunden habe, ist, alle Tabellen entsprechend neu anlegen, die Schlüssel so definieren, wie es jetzt nötig ist und erst dann die die Einträge aus den dann alten Tabellen übertrage. Dann müsste ich alte Tabellen löschen und einen Teil der neuen Tabellen umbenennen. Das ist, ehrlich gesagt, zu viel Aufwand, da es ja eigentlich auf oben beschriebene Weise auch funktionieren müsste.
Der Fehler von MS SQL Server ist folgender:
In der t1-Tabelle, auf die verwiesen wurde, befinden sich keine primären oder Kandidatenschlüssel, die mit der verweisenden Spaltenliste im FK__t2__i1__1AD3FDA4-Fremdschlüssel übereinstimmen.
Wie gesagt, dasselbe Vorgehen auf einer leeren Datenbank (also dieselbe bereits existente Datenbankstruktur mit leeren Tabellen) funktioniert einwandfrei ohne Fehler oder Warnungen.
Was muss ich tun, um mein Problem elegant zu lösen?
Danke!
Schnoof