Jika ini adalah sesuatu yang Anda rencanakan untuk dilakukan secara teratur (yaitu itu adalah bagian dari logika aplikasi dan bukan latihan transformasi data satu kali) maka Anda dapat menggunakan tampilan pada Table1 dan Table2 dengan INSTEAD OF INSERTpemicu untuk mengelola pemisahan data (dan mengatur kunci / hubungan) - maka Anda cukup melakukan:
INSERT newView SELECT NEWID(), A, B, C, D, E, F FROM MyTable
dan pemicunya bisa sesederhana:
CREATE trg_newview_insert TRIGGER newView INSTEAD OF UPDATE AS
INSERT table1 SELECT ID, A, B, C FROM inserted
INSERT table2 SELECT ID, D, E, F FROM inserted
GO
dengan asumsi tampilan adalah seperti:
CREATE VIEW newView AS
SELECT table1.ID, A, B, C, D, E, F
FROM table1
JOIN table2 ON table1.ID = table2.ID;
atau jika mungkin ada baris di setiap tabel tanpa baris yang cocok di yang lain:
CREATE VIEW newView AS
SELECT ISNULL(table1.ID, table2.ID), A, B, C, D, E, F
FROM table1
FULL OUTER JOIN table2 ON table1.ID = table2.ID;
(tentu saja apa baris yang dihasilkan ketika Anda SELECTdari tampilan tidak penting jika Anda tidak berniat SELECTdarinya dan itu hanya ada untuk menyediakan templat ke INSERTdalam sebagai pemicu untuk melakukan keajaibannya)
Ini dengan asumsi bahwa Anda berniat untuk menggunakan jenis UUID untuk kunci utama Anda dalam kasus ini - jika Anda menggunakan kunci integer yang bertambah secara otomatis pada table1, ada sedikit pekerjaan yang harus dilakukan. Sesuatu seperti yang berikut ini mungkin berfungsi:
CREATE trg_newview_insert TRIGGER newView INSTEAD OF UPDATE AS
INSERT table1 (A, B, C)
SELECT A, B, C
FROM inserted;
INSERT table2 (ID, D, E, F)
SELECT ID, D, E, F
FROM table1 AS t
JOIN inserted AS i ON t.A = i.A AND t.B = i.B AND t.C = i.C;
GO
dan pada kenyataannya bahwa sepasang INSERTpernyataan dapat bekerja secara langsung sebagai satu kali seperti itu (apakah Anda menggunakan INT IDENTITYatau UNIQUEIDENTIFIER DEFAULT NEWID()mengetik untuk kunci):
INSERT table1 (A, B, C)
SELECT A, B, C
FROM MyTable;
INSERT table2 (ID, D, E, F)
SELECT ID, D, E, F
FROM table1 AS t
JOIN MyTable AS i ON t.A = i.A AND t.B = i.B AND t.C = i.C;
meniadakan perlunya tampilan dan pemicu sepenuhnya, meskipun jika ini adalah operasi Anda akan sering melakukan dalam kode Anda tampilan + pemicu masih layak dipertimbangkan untuk mengabstraksi kebutuhan untuk beberapa pernyataan setiap kali.
CAVEAT: semua SQL di atas telah diketik dari pikiran dan tidak diuji, itu akan perlu bekerja sebelum ada jaminan itu akan berfungsi seperti yang Anda butuhkan.