Bu düzenli olarak yapmayı planladığınız bir şeyse (yani bir kereye mahsus veri dönüştürme alıştırması değil, uygulama mantığının bir parçasıdır) INSTEAD OF INSERT, verilerin bölünmesini yönetmek (ve düzenlemek) için bir tetikleyici ile Tablo1 ve Tablo2'ye bir görünüm kullanabilirsiniz. anahtarlar / ilişkiler) - o zaman yapmanız gerekenler:
INSERT newView SELECT NEWID(), A, B, C, D, E, F FROM MyTable
ve tetik şu kadar basit olabilir:
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
manzaranın şöyle olduğunu varsayarsak:
CREATE VIEW newView AS
SELECT table1.ID, A, B, C, D, E, F
FROM table1
JOIN table2 ON table1.ID = table2.ID;
veya her tabloda, diğerinde eşleşen satırlar olmadan satırlar varsa:
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;
(elbette SELECT, görünümden siz istemiyorsanız hangi satırların çıktısı önemsizdir SELECTve yalnızca INSERTtetikleyicinin sihrini yapması için içine bir şablon sağlamak için var olur )
Bu, bu durumda birincil anahtarınız için bir UUID türü kullanmayı planladığınızı varsayar - table1'de otomatik olarak artan bir tam sayı anahtarı kullanıyorsanız, yapmanız gereken daha fazla iş vardır. Aşağıdaki gibi bir şey işe yarayabilir:
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
ve aslında bir çift INSERTifade doğrudan bir kereye mahsus gibi çalışabilir ( anahtar için bir INT IDENTITYveya UNIQUEIDENTIFIER DEFAULT NEWID()tür kullanıyor olsanız da ):
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;
görünüm ve tetikleyici ihtiyacını tamamen ortadan kaldırır, ancak bu bir kod ise sık sık gerçekleştireceğiniz bir işlemse, görünüm + tetikleyici yine de her seferinde birden fazla ifade ihtiyacını soyutlamaya değer olacaktır.
CAVEAT: yukarıdaki tüm SQL düşünce yazılmıştır ve test edilmemiştir, ihtiyacınız olduğu gibi çalışacağına dair herhangi bir garanti olmadan önce çalışmaya ihtiyaç duyacaktır.