Ich stehe momentan vor einem Problem, und ich hätte gerne eine schnelle Lösung dafür.INSERT IN oder UPDATE bei Zustand
Ich habe bereits eine andere Antwort zu diesem Problem gefunden, aber keine hat geholfen, ich hatte gelesen über INSERT INTO und INSERT ON DUPLICATE KEY UPDATE, aber ich denke, es hilft mir nicht wirklich.
Also die Sache ist, ich habe einige Migrationen aktiviert, die neue Spalten zu bestehenden Tabellen hinzufügen, die Sache ist, dass die vorhandenen Datensätze in der Tabelle vor der Migration Datensätze mit leeren Werten sogar für vorhandene Spalten erhalten (weil ich die Reihenfolge ändern der Spalten in der neuen Tabelle migriert)
Ich mache ein SP, dass es Zweck ist, die neue migrierte Tabelle gemäß Einfügungen oder Updates zu füllen.
- mag ich neue Datensätze immer außer im Fall einzufügen, die ich einen vorhandenen Datensatz auf dem Tisch mit leeren Spalten gefunden (Spalte Id - Primärschlüssel - gefüllt ist)
Der „Pseudo-Code“ (Misch sQL-Tabellen Wissen und C# Syntax) so etwas wie dieses würde:
int i = 0;
foreach(Record item in importing_data_table)
{
if(i < tableMigrated.Length && tableMigrated[i].Column IS NULL)
{
UPDATE tableMigrated[i] SET Column = item.Column
}
else
{
INSERT INTO item
}
i++;
}
HINWEIS: Löschen Sie alle Zeilen vom tableMigrated vor Einfügen ist nicht möglich, weil es Fremdschlüssel für diese Tabelle gibt. Ich habe den folgenden Fehler beim Versuch dieses Ansatzes: - Die DELETE-Anweisung im Konflikt mit der REFERENCE-Einschränkung "FK_blabla.Testing_testingTest.tableMigrated_Id".
NOTE2: Vielleicht ist meine einzige Option die Verwendung von Cursors?
Vielen Dank für Ihre Hilfe im Voraus!
Ich wusste, dass jemand diese Frage stellen würde. Ich habe diese Woche für mich selbst gelöst. Update gibt eine Ganzzahl zurück, die die Anzahl der betroffenen Zeilen angibt. Wenn Update Null zurückgibt, füge ich die Daten ein. Sie können nicht einfügen, wenn der Primärschlüsselwert bereits in der Datenbank vorhanden ist. Versuchen Sie also zuerst update und wenn es keine betroffenen Zeilen zurückgibt, verwenden Sie Einfügen. – jdweng