Ich ändere die Struktur einer Datenbank. Der Inhalt mehrerer Spalten der Tabelle FinancialInstitution muss in die Tabelle Person übertragen werden . FinancialInstitution ist mit einer Person mit einem Fremdschlüssel verknüpft. Jede FinancialInstitution benötigt die ID ihrer entsprechenden Person. Für jede neue Zeile, die in Person eingefügt wird, muss die ID dieser neuen Zeile (IDENTITY) zurück in die entsprechende Zeile von FinancialInstitution kopiert werden.
Die naheliegende Möglichkeit hierfür ist ein iterativer T-SQL-Code. Ich bin jedoch daran interessiert zu wissen, ob dies nur mit satzbasierten Operationen möglich ist.
Ich stellte mir vor, dass die innere Ebene einer solchen Anfrage ungefähr so aussehen würde:
INSERT INTO Person (Street1, Number1, City1, State1, PostCode1, CountryId1, WorkDirectPhone1, Fax1, Email1)
OUTPUT inserted.Id, FinancialInstitution.Id
SELECT Id, Street, Number, City, [State], PostCode, CountryId, PhoneNumber, Fax, Email
FROM FinancialInstitution;
Leider kann OUTPUT nicht auf diese Weise korrelieren ...
quelle
Person
? Oder bestehende aktualisieren? Oder möchtest du inPerson
und dann einfügenUPDATE FinancialInstitution
?Antworten:
Ich denke, Sie könnten (ab) dafür verwenden
MERGE
. Erstellen Sie zuerst eine (temporäre) Tabelle:Dann
MERGE
inPerson
(anstelle vonINSERT
), damit Sie Spalten der in dieOUTPUT
Klausel einbezogenen Tabellen verwenden können :Verwenden Sie dann die temporäre Tabelle, um
UPDATE FinancialInstitution
:Test bei: SQL-Fiddle
quelle