Ich versuche, eine Tabelle von Daten auszuwählen und diese Daten in eine andere Datei mit ähnlichen Spaltennamen einzufügen (es sind im Wesentlichen doppelte Daten). Aktuelle Syntax wie folgt:
%Vor%Das Problem, das ich habe, erzeugt eindeutige Schlüsselfelder (deklariert als Ganzzahlen) für die neu eingefügten Datensätze. Ich kann die Schlüssel von Tabelle2 nicht verwenden, da Tabelle1 über vorhandene Daten verfügt und bei doppelten Schlüsselwerten ein Fehler auftritt.
Ich kann das Tabellenschema nicht ändern, und dies sind benutzerdefinierte ID-Spalten, die nicht automatisch von der Datenbank generiert werden.
Hat table1 ein Auto-Increment für sein ID-Feld? Wenn ja, können Sie ähnlicheId aus der Einfügung verlieren und die automatische Inkrementierung um eindeutige Schlüssel kümmern?
%Vor%Ich bin mir nicht sicher, ob ich Sie richtig verstanden habe: Sie möchten alle Daten aus TABLE2 kopieren, aber stellen Sie sicher, dass TABLE2.similarId nicht bereits in TABLE1.id vorhanden ist, vielleicht ist dies eine Lösung für Ihr Problem:
%Vor%Die Einfügung wird jetzt wegen der Primärschlüsselverletzung nicht fehlschlagen, weil jede eingefügte ID größer ist als die ID, die dort bereits vorhanden war.
Gemäß Ihrer Anforderung müssen Sie wie folgt abfragen:
%Vor% Was habe ich hier gemacht:
Hinzugefügt ROW_NUMBER()
, das von 1 beginnt, also auch hinzugefügt MAX()
Funktion für die ID der Zieltabelle.
Wenn das ID-Feld als Auto-ID definiert ist und Sie es aus der INSERT-Anweisung herauslassen, generiert sql eindeutige IDs aus dem verfügbaren Pool.
In SQL Server haben wir die Funktion ROW_NUMBER, und wenn ich Sie richtig verstanden habe, wird der folgende Code tun, was Sie brauchen:
%Vor%ROW_NUMBER bringt die Nummer jeder Zeile und Sie können einen "magischen Wert" hinzufügen, um diese Werte von der aktuellen maximalen ID von TABLE1 zu unterscheiden. Nehmen wir an, Ihre aktuelle maximale ID ist 6. Wenn Sie dann 6 zu jedem Ergebnis von ROW_NUMBER hinzufügen, erhalten Sie 7, 8, 9 und so weiter. Auf diese Weise haben Sie nicht die gleichen Werte für den Primärschlüssel von TABLE1.
Ich habe Google gefragt und mir gesagt, dass Sybase auch die Funktion ROW_NUMBER hat ( Ссылка ), also denke ich, dass Sie es versuchen können.
Sie können am besten eine zusätzliche Spalte in Table2 für Table1.Id hinzufügen. Auf diese Weise behalten Sie beide Schlüsselgruppen.
(Wenn Sie mit einer Datenzusammenführung beschäftigt sind, kann die Beibehaltung von Table1.Id für alle Fremdschlüssel wichtig sein, die möglicherweise weiterhin auf Table1.Id verweisen. Sie müssen dann Fremdschlüssel in Tabellen korrigieren, die auf Table1.Id verweisen. die nun auf den zutreffenden Schlüssel in Tabelle 2 verweisen müssen.
Wenn Ihre zweite Tabelle ähnliche Werte wie in der ersten Tabelle haben soll, dann wenden Sie auto increment
nicht auf die zweite Tabelle an.