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 SELECT
ve yalnızca INSERT
tetikleyicinin 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 INSERT
ifade doğrudan bir kereye mahsus gibi çalışabilir ( anahtar için bir INT IDENTITY
veya 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.