Saya memodifikasi struktur database. Isi beberapa kolom tabel FinancialInstitusi harus ditransfer ke tabel Person . Institusi Keuangan ditautkan dengan Orang dengan kunci asing. Setiap Lembaga Keuangan membutuhkan ID dari Orang yang bersangkutan. Jadi, untuk setiap baris baru yang dimasukkan dalam Person, id dari baris baru ini (IDENTITY) harus disalin kembali ke baris yang sesuai dari FinancialInstitusi.
Cara yang jelas untuk melakukan ini adalah kode T-SQL berulang. Tapi saya tertarik untuk mengetahui apakah mungkin untuk melakukannya hanya dengan operasi berbasis set.
Saya membayangkan tingkat dalam dari permintaan semacam itu adalah:
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;
Sayangnya, sepertinya OUTPUT tidak dapat berkorelasi seperti itu ...
sql-server
insert
output-clause
Yugo Amaryl
sumber
sumber
Person
? Atau perbarui yang sudah ada? Atau Anda ingin memasukkan ke dalamPerson
laluUPDATE FinancialInstitution
?Jawaban:
Saya kira Anda bisa (ab) gunakan
MERGE
untuk ini. Pertama-tama buat tabel (sementara):Lalu
MERGE
kePerson
(bukanINSERT
), jadi Anda bisa menggunakan kolom dari tabel yang terlibat dalamOUTPUT
klausa:Kemudian gunakan tabel temp untuk
UPDATE FinancialInstitution
:Tes di: SQL-Fiddle
sumber